说我要合并两个数据框,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 ;
答案 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))))