You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并两个带Timestamp索引的Pandas DataFrame?

合并带时间戳索引的Pandas DataFrame(处理冲突值与保留全量索引/列)

直接用以下代码即可实现需求,先预处理解决值冲突,再完成合并:

import pandas as pd
import numpy as np

# 示例输入数据
df1 = pd.DataFrame(
    {
        "PT1": ["A0", "A1", "A2"],
        "PT2": ["B0", "B1", "B2"],
        "PT3": ["C0", "C1", "C2"],
    },
    index=pd.DatetimeIndex(["2025-05-01 10:00", "2025-05-01 10:01", "2025-05-01 10:02"]),
)

df2 = pd.DataFrame(
    {
        "PT1": ["A0", "A1", "A3"],
        "PT4": ["D0", "D1", "D3"],
    },
    index=pd.DatetimeIndex(["2025-05-01 10:00", "2025-05-01 10:01", "2025-05-01 10:03"]),
)

# 步骤1:预处理df2,替换与df1冲突的值为NaN
common_indices = df1.index.intersection(df2.index)
common_columns = df1.columns.intersection(df2.columns)

# 提取共有的数据区域进行对比
df1_common = df1.loc[common_indices, common_columns]
df2_common = df2.loc[common_indices, common_columns]

# 标记值不同的位置,将df2对应位置设为NaN
conflict_mask = df1_common != df2_common
df2.loc[common_indices, common_columns] = df2.loc[common_indices, common_columns].mask(conflict_mask)

# 步骤2:合并两个DataFrame,保留所有时间戳和列
df_merged = df1.combine_first(df2)

# 按时间戳排序(可选,确保索引有序)
df_merged = df_merged.sort_index()

print(df_merged)

关键步骤说明

预处理冲突值

  • 先定位两个DataFrame共有的时间戳和列,只处理可能存在值冲突的区域
  • 对比相同位置的值,将df2中与df1不同的数值替换为NaN,避免合并时覆盖df1的有效数据

合并逻辑

  • combine_first()方法会自动对齐时间戳索引和列:
    • 最终结果的索引是两个DataFrame时间戳的并集
    • 最终结果的列是两个DataFrame列的并集
    • 优先保留df1的非空值,用df2的非空值填充df1的缺失部分,同时保留df2独有的时间戳和列

冲突场景测试

如果df2的PT1在2025-05-01 10:00的值为"A0_conflict"(与df1的"A0"不同),预处理后该值会被替换为NaN,合并后df1的"A0"会被保留,不会被覆盖。

内容的提问来源于stack exchange,提问作者Enesma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:27:22