与Pandas合并的简洁方法

时间:2014-09-17 18:45:05

标签: python pandas merge

说我要合并两个数据框,df1(列的一致性' a'''' c'' z&#39 ;)和df2由列(' a',''' d'' y')组成。专栏' a'和' b'两个数据帧都包含相同的相应信息。通常情况下,我会执行以下操作来生成一个新的数据框,其中' c'并且' d'分配给相应的' a'和' b':

relevant_columns1 = ['a','b','c']
relevant_columns2 = ['a','b','d']
df3 = pd.merge(df1[relevant_columns1], df2[relevant_columns2])

但是,我是否可以通过合并函数传递此信息,而不必将列标题放入列表格式?我的目标是生成一个新的数据框df3,其中包含列''''''''' d&#39 ;

2 个答案:

答案 0 :(得分:1)

您可以使用

pd.merge(df1, df2)[['a','b','c','d']]

默认情况下,pd.merge将根据共同共享的所有列进行合并。

In [71]: df1 = pd.DataFrame(np.arange(20).reshape((5, 4)), columns=list('abcz'))

In [72]: df2 = pd.DataFrame(np.arange(20).reshape((5, 4)), columns=list('abdy'))

In [79]: pd.merge(df1, df2)
Out[79]: 
    a   b   c   z   d   y
0   0   1   2   3   2   3
1   4   5   6   7   6   7
2   8   9  10  11  10  11
3  12  13  14  15  14  15
4  16  17  18  19  18  19

然后,您可以只选择所需的列:

In [78]: pd.merge(df1, df2)[['a','b','c','d']]
Out[78]: 
    a   b   c   d
0   0   1   2   2
1   4   5   6   6
2   8   9  10  10
3  12  13  14  14
4  16  17  18  18

所以 df3 = pd.merge(df1, df2)[['a','b','c','d']]不那么冗长,但它确实会创建一个更大的临时数据帧,因此您的方法可能更具内存效率,尤其是在存在大量不相关列的情况下。

答案 1 :(得分:0)

可能像

df3 = pd.merge(list(df1), list(set(list(df2)) - set(list(df1))))