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

基于日期合并两个DataFrame并去除重复值的技术求助

基于日期合并DataFrame并去重的解决方案

原代码使用pd.concat()行堆叠两个DataFrame,导致共同日期重复出现,无法满足「日期唯一、所有列值完整填充」的需求。以下是两种可行的解决方法:

方法1:堆叠后按日期分组聚合

先堆叠两个DataFrame,再以日期为分组依据,取每组的第一个有效值(因同日期的A、B值在两个源DataFrame中一致,C列仅存在于df_2):

import pandas as pd

dict1 = {"Date":["2000-01-01", "2000-01-04", "2000-01-05", "2000-01-07"], "A":[99, 93,100,97], "B": [106,107,109,105]}
dict2 = {"Date":["2000-01-01", "2000-01-03", "2000-01-05", "2000-01-07"], "A":[99, 96,100,97], "B": [106,100,109,105], "C":[2,5,8,4]}

# 初始化DataFrame并处理日期索引
df_1 = pd.DataFrame(dict1)
df_1["Date"] = pd.to_datetime(df_1["Date"])
df_1.set_index("Date", inplace=True)

df_2 = pd.DataFrame(dict2)
df_2["Date"] = pd.to_datetime(df_2["Date"])
df_2.set_index("Date", inplace=True)

# 堆叠后分组去重
df_1_2 = pd.concat([df_1, df_2]).groupby(level=0).first()
# 可选:将日期从索引转回列
# df_1_2.reset_index(inplace=True)
print(df_1_2)

输出结果中所有日期唯一,A、B列值正确填充,C列仅在df_2包含的日期处有值(若需填充缺失值,可添加df_1_2.fillna(0, inplace=True)等操作)。

方法2:使用外连接合并

直接基于Date列做外连接,合并两个DataFrame后处理重复列:

import pandas as pd

dict1 = {"Date":["2000-01-01", "2000-01-04", "2000-01-05", "2000-01-07"], "A":[99, 93,100,97], "B": [106,107,109,105]}
dict2 = {"Date":["2000-01-01", "2000-01-03", "2000-01-05", "2000-01-07"], "A":[99, 96,100,97], "B": [106,100,109,105], "C":[2,5,8,4]}

# 初始化DataFrame并处理日期(无需设置索引)
df_1 = pd.DataFrame(dict1)
df_1["Date"] = pd.to_datetime(df_1["Date"])

df_2 = pd.DataFrame(dict2)
df_2["Date"] = pd.to_datetime(df_2["Date"])

# 外连接合并
df_1_2 = pd.merge(df_1, df_2, on="Date", how="outer", suffixes=('_x', '_y'))
# 合并重复的A、B列(同日期值一致,取非空值即可)
df_1_2['A'] = df_1_2['A_x'].combine_first(df_1_2['A_y'])
df_1_2['B'] = df_1_2['B_x'].combine_first(df_1_2['B_y'])
# 删除冗余列并排序
df_1_2.drop(['A_x', 'A_y', 'B_x', 'B_y'], axis=1, inplace=True)
df_1_2.sort_values('Date', inplace=True)
print(df_1_2)

该方法无需操作索引,直接通过Date列完成合并,结果同样满足日期唯一、列值完整的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:45:27