我正在使用Pandas,并希望从多个数据帧中提取值。 例如,有三个数据帧如下。
df1 = pd.DataFrame({'key': ['K0', 'K1'],
'A': ['A0', 'A1'],
'B': ['B0', 'B1']})
df2 = pd.DataFrame({'key': ['K1', 'K22'],
'C': ['C1', 'C3'],
'D': ['D1', 'D3']})
df3 = pd.DataFrame({'key': ['K1', 'K30'],
'E': ['E1', 'E3'],
'F': ['F1', 'F3']})
如果在数据帧之间共享密钥,我想提取值。 所以我在下面做了
pd.merge(df1,df2, on='key')
这显示如下,这很好。
A B key C D
0 A1 B1 K1 C1 D1
但是,如果我尝试超过2个数据帧,它将无法正常工作。 例如,以下不起作用。
pd.merge(df1,df2,df3, on='key')
我认为pd.merge不适合这个。 有没有人知道这样做的好方法?
谢谢!
答案 0 :(得分:6)
pd.merge适用于两个数据框(左和右)
您可以使用pd.concat连接数据帧列表。
pd.concat([df1,df2,df3],axis=1)
右...
pd.concat([df1.set_index('key'),df2.set_index('key'),df3.set_index('key')],axis=1,join='inner')
答案 1 :(得分:3)
与concat不同,合并一次只能应用于两个数据帧,因此解决方案是在合并的第一个输出上使用合并
df1.merge(df2, on='key').merge(df3, on = 'key')
给出
A B key C D E F
0 A1 B1 K1 C1 D1 E1 F1
答案 2 :(得分:0)
pd.merge
不适用于2个以上的数据帧。但是,您可以尝试使用pd.concat
。查看here
答案 3 :(得分:0)
您可以像这样重复合并:
df = df1
for right in [df2, df3]:
df = df.merge(right, on='key')
在您的数据上运行此命令:
A B key C D E F
0 A1 B1 K1 C1 D1 E1 F1
让for循环覆盖你想要与第一个合并的所有其他数据帧。
答案 4 :(得分:0)
虽然我不是熊猫专家,但我想连续调用pd.merge
会合适地合并它们:pd.merge(pd.merge(df1, df2), df3)
。对于程序化缩减,请查看functools.reduce(pd.merge, dfs)
(其中dfs
是可迭代的数据帧)。熊猫可能有一个内置的解决方案,以更好地适应,但这将工作。希望这有帮助!
答案 5 :(得分:0)