我使用pandas DataFrame作为轻量级数据集来维护某些状态,并需要动态/持续地将新DataFrame合并到现有表中。假设我有两个数据集如下:
DF1:
a b
0 0 1
1 2 3
2 4 5
3 6 7
4 8 9
DF2:
b c
0 10 11
1 12 13
2 14 15
3 16 17
4 18 19
我想将df2合并到df1(在索引上),对于共同的列(在这种情况下,它是'b'),只需丢弃df2的公共列。
a b c
0 0 1 11
1 2 3 13
2 4 5 15
3 6 7 17
4 8 9 19
我的代码是使用SET检查df1和df2之间的公共部分,因此我手动删除df2中的公共部分。我想知道有没有更有效的方法呢?
答案 0 :(得分:4)
首先确定df2
中不在df1
cols = df2.columns.difference(df1.columns)
然后pd.DataFrame.join
df1.join(df2[cols])
a b c
0 0 1 11
1 2 3 13
2 4 5 15
3 6 7 17
4 8 9 19
或pd.concat
也可以使用
pd.concat([df1, df2[cols]], axis=1)
a b c
0 0 1 11
1 2 3 13
2 4 5 15
3 6 7 17
4 8 9 19
答案 1 :(得分:4)
pd.merge(left=df1, right=df2, how='inner')
a b c
0 0 1 11
1 2 3 13
2 4 5 15
3 6 7 17
4 8 9 19
通过消除merge函数的'on'属性,它将考虑两个数据帧中共同的列。