最后合并熊猫数据框

时间:2021-08-01 15:13:13

标签: python pandas dataframe pandas-groupby

如何将两个数据帧合并为一个,只保存不同的行?

我尝试过(使用外连接)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 

2 个答案:

答案 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()