基于公共列合并多个数据框

新手上路,请多包涵

我有三个数据框。它们都有一个公共列,我需要根据公共列合并它们而不丢失任何数据

输入

>>>df1
0 列 1 列 2 列 3
1 数据 1 3 4
2 数据 2 4 3
3 数据 3 2 3
4 数据 4 2 4
5 数据 5 1 4

>>>df2
0 列 1 列 4 列 5
1 数据 1 7 4
2 数据 2 6 9
3 数据 3 1 4

>>>df3
0 列 1 列 6 列 7
1 数据 2 5 8
2 数据 3 2 7
3 数据 5 5 3

预期产出

>>>df
0 Col1 Col2 Col3 Col4 Col5 Col6 Col7
1 数据 1 3 4 7 4
2 数据 2 4 3 6 9 5 8
3 数据 3 2 3 1 4 2 7
4 数据 4 2 4
5 数据 5 1 4 5 3

原文由 FunnyCoder 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 386
2 个回答

使用 mergereduce

 In [86]: from functools import reduce

In [87]: reduce(lambda x,y: pd.merge(x,y, on='Col1', how='outer'), [df1, df2, df3])
Out[87]:
    Col1  Col2  Col3  Col4  Col5  Col6  Col7
0  data1     3     4   7.0   4.0   NaN   NaN
1  data2     4     3   6.0   9.0   5.0   8.0
2  data3     2     3   1.0   4.0   2.0   7.0
3  data4     2     4   NaN   NaN   NaN   NaN
4  data5     1     4   NaN   NaN   5.0   3.0


细节

In [88]: df1
Out[88]:
    Col1  Col2  Col3
0  data1     3     4
1  data2     4     3
2  data3     2     3
3  data4     2     4
4  data5     1     4

In [89]: df2
Out[89]:
    Col1  Col4  Col5
0  data1     7     4
1  data2     6     9
2  data3     1     4

In [90]: df3
Out[90]:
    Col1  Col6  Col7
0  data2     5     8
1  data3     2     7
2  data5     5     3

原文由 Zero 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 pd.concat

 df1.set_index('Col1',inplace=True)
df2.set_index('Col1',inplace=True)
df3.set_index('Col1',inplace=True)
df = pd.concat([df1,df2,df3],axis=1,sort=False).reset_index()
df.rename(columns = {'index':'Col1'})

    Col1    Col2    Col3    Col4    Col5    Col6    Col7
0   data1   3       4       7.0     4.0     NaN     NaN
1   data2   4       3       6.0     9.0     5.0     8.0
2   data3   2       3       1.0     4.0     2.0     7.0
3   data4   2       4       NaN     NaN     NaN     NaN
4   data5   1       4       NaN     NaN     5.0     3.0

原文由 Space Impact 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题