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

Python Pandas如何合并两个结构存在差异的DataFrame?

合并两个DataFrame并保留所有日期与列的解决方案

需求说明

需要合并初始数据表df1和更新版数据表df2,最终结果需包含所有日期、所有列,缺失值以NaN填充。

实现方案

使用pandas的pd.concat()函数即可直接实现,该函数会自动对齐两个DataFrame的所有列,缺失值自动填充NaN,同时保留所有行数据。

代码示例

1. 创建示例数据(模拟用户提供的df1和df2)

import pandas as pd

# 初始数据表df1
df1 = pd.DataFrame({
    'Result': ['2021-12-31', '2022-01-01', '2022-01-02', '2022-01-03'],
    'A': [False, False, False, True],
    'B': [True, False, True, False],
    'C': [True, True, False, True]
})

# 更新版数据表df2
df2 = pd.DataFrame({
    'Result': ['2022-01-04', '2022-01-05', '2022-01-06', '2022-01-07'],
    'A': [False, True, False, False],
    'B': [False, False, True, False],
    'C': [True, True, False, True],
    'D': [True, True, True, True]
})

2. 合并并整理数据

# 合并两个DataFrame,重置索引
merged_df = pd.concat([df1, df2], ignore_index=True)

# 可选:将日期列转为datetime类型并按日期排序(让结果更规整)
merged_df['Result'] = pd.to_datetime(merged_df['Result'])
merged_df = merged_df.sort_values('Result').reset_index(drop=True)

3. 最终结果

合并后的merged_df结构如下:

ResultABCD
2021-12-31FalseTrueTrueNaN
2022-01-01FalseFalseTrueNaN
2022-01-02FalseTrueFalseNaN
2022-01-03TrueFalseTrueNaN
2022-01-04FalseFalseTrueTrue
2022-01-05TrueFalseTrueTrue
2022-01-06FalseTrueFalseTrue
2022-01-07FalseFalseTrueTrue

补充说明

如果df1和df2存在重复日期(同一日期在两个表中都有记录),pd.concat()会保留两行数据。若需要保留更新后的df2数据,可在合并后执行去重操作:

# 按Result列去重,保留最后出现的记录(即df2中的数据)
merged_df = merged_df.drop_duplicates(subset='Result', keep='last')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:15:42