如何将两个数据帧合并为一个,只保存不同的行?
我尝试过(使用外连接)pd.join
和 .merge
,但它们似乎与数据框列混淆,并且没有解决问题。
我的 df 看起来像:
Time (my index) | Open | High | Low | Close | Volume | indicator1 | Indicator2 | ...
我每 15 分钟下载一次新数据并将其保存在 df2 中,然后在 df1 中读取旧数据。
df2 有 df1 没有的行(按时间定义为索引),我希望我可以将它们添加到 df2 的末尾。
示例:
DF1:
Time.................................Open.........High..........Low...........Close.........Volume
2021-07-22 07:00:00 32055.25 32145.09 31970.84 31977.06 111.789173
2021-07-22 07:15:00 31979.67 32002.25 31926.26 31986.9 65.247509
DF2:
Time.................................Open.........High..........Low...........Close.........Volume
2021-07-22 07:15:00 31979.67 32002.25 31926.26 31986.9 65.247509
2021-07-22 07:30:00 31986.9 32030 31926.76 31942.18 62.549173
DF3:
Time.................................Open.........High..........Low...........Close.........Volume
2021-07-22 07:00:00 32055.25 32145.09 31970.84 31977.06 111.789173
2021-07-22 07:15:00 31979.67 32002.25 31926.26 31986.9 65.247509
2021-07-22 07:30:00 31986.9 32030 31926.76 31942.18 62.549173
答案 0 :(得分:0)
试试这个
df3 = pd.concat([df1,df2])
df3.drop_duplicates(inplace=True)
答案 1 :(得分:0)
首先,您可以与 outer 和 indicator=True 合并(返回合并信息,例如,如果值仅在右侧 df 上,仅在左侧 df 上,或同时在两者上
merged = pd.merge(df1, df2, left_index=True, right_index=True, how='outer', indicator=True)
然后,我们只想要 df2 (right_only) 上的差异
right_only = merged.query("_merge == 'right_only'").reset_index()['Time'].values == df2.reset_index()['Time'].values
最后,我们将 df1 附加到 df2 的 right_only 值
df3 = df1.append(df2[right_only])
所以完整的代码是:
merged = merge(df1, df2, left_index=True, right_index=True, how='outer', indicator=True)
right_only = merged.query("_merge == 'right_only'").reset_index()['Time'].values == df2.reset_index()['Time'].values
df3 = df1.append(df2[right_only])
但是就像@Tejas 提到的,你可以使用 concat:
concatenate = pd.concat([df1, df2])
df3 = concatenate.groupby(concatenate.index).first()