我尝试合并两个DataFrames
求和列值。
DF1
id name weight
1 A 0
2 B 10
3 C 10
DF2
id name weight
2 B 15
3 C 10
我需要在合并期间对公共列中的类似值求和权重值。
merge = pd.merge(df1,df2, how='inner')
所以输出结果如下。
id name weight
2 B 25
3 C 20
答案 0 :(得分:8)
In [41]: pd.merge(df1, df2, on=['id', 'name']).set_index(['id', 'name']).sum(axis=1)
Out[41]:
id name
2 B 25
3 C 20
dtype: int64
答案 1 :(得分:7)
如果将公共列设置为索引,则可以将两个数据帧相加,这比合并要简单得多:
In [30]: df1 = df1.set_index(['id', 'name'])
In [31]: df2 = df2.set_index(['id', 'name'])
In [32]: df1 + df2
Out[32]:
weight
id name
1 A NaN
2 B 25
3 C 20
答案 2 :(得分:1)
如果您要汇总多个列,则此解决方案也适用。假设数据帧
>>> df1
id name weight height
0 1 A 0 5
1 2 B 10 10
2 3 C 10 15
>>> df2
id name weight height
0 2 B 25 20
1 3 C 20 30
您可以将它们串联起来并按索引列分组。
>>> pd.concat([df1, df2]).groupby(['id', 'name']).sum().reset_index()
id name weight height
0 1 A 0 5
1 2 B 35 30
2 3 C 30 45