如何在Pandas中实现不新增列的外连接,仅添加新日期数据
解决方案:保留原有数据,仅追加新日期的行
我明白你的需求啦——你想保留第一个DataFrame里的所有原有数据,只把第二个DataFrame中全新的日期(也就是第一个里没有的那些)对应的value加进去,完全忽略掉两个DataFrame中重复日期的行(哪怕它们的value有细微差异)。之前用外连接出问题很正常,因为外连接会保留两边所有的行,包括重复日期的条目,这显然不是你想要的。
步骤1:构造示例数据
先把你给出的两个DataFrame用代码还原出来:
import pandas as pd # 第一个DataFrame df1 = pd.DataFrame({ 'date': [20100101, 20100102], 'value': [100, 150] }) # 第二个DataFrame df2 = pd.DataFrame({ 'date': [20100102, 20100103], 'value': [150.01, 180] })
步骤2:筛选第二个DataFrame中的新日期行
我们需要找出df2里那些date没有出现在df1中的行,这一步可以用isin()方法配合取反操作~来实现:
# 筛选df2中不在df1日期列表里的行 new_rows = df2[~df2['date'].isin(df1['date'])]
这行代码会得到df2中日期为20100103的那一行,也就是我们需要追加的新数据。
步骤3:合并数据并整理结果
把df1和筛选出来的new_rows合并,然后按日期排序、重置索引就得到你想要的结果了:
# 合并两个数据集 result = pd.concat([df1, new_rows]) # 按日期排序并重置索引 result = result.sort_values('date').reset_index(drop=True)
最终输出结果
运行上面的代码后,result的内容就是:
date value 0 20100101 100.0 1 20100102 150.0 2 20100103 180.0
这个方法完美满足你的需求:既保留了df1的所有原有数据,又只追加了df2中的新日期条目,完全忽略了重复日期的差异值。
内容的提问来源于stack exchange,提问作者Kevin Fang
相关产品推荐
相关产品推荐

