合并两个pandas数据框并跳过右侧的公共列

时间:2017-11-15 05:45:24

标签: python pandas

我使用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中的公共部分。我想知道有没有更有效的方法呢?

2 个答案:

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

Pandas合并功能也将起作用奇迹。你可以这样做:

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'属性,它将考虑两个数据帧中共同的列。