从pandas数据帧中提取值

时间:2017-03-22 02:58:29

标签: python pandas extract overlap

我正在使用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不适合这个。 有没有人知道这样做的好方法?

谢谢!

6 个答案:

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

您可以使用Pandas concat功能。

下面的代码将为您提供您正在寻找的结果。

pd.concat([df1,df2,df3],axis=1) 

您可以在pandas文档here

中找到更多信息