我有一个数据框df
,其中包含从Name1
到Name2
的付款信息,其中包含一些用户的信息。
df
Name1 Name2 amount
0 Tom Jack 554
1 Eva Laura 334
2 Eva Tom 45
3 Jack Sara 120
4 Jack Tom 30
我想分组
,并为每个名称提供总金额花费
和总金额收到
df
Name Spent Received
0 Tom 554 75
1 Jack 150 554
2 Sara 0 120
3 Laura 0 334
4 Eva 379 0
最佳答案
使用melt
聚合 sum
并按 unstack
reshape :
df = (df.melt('amount', value_name='Name')
.groupby(['Name', 'variable'])['amount']
.sum()
.unstack(fill_value=0)
.rename(columns={'Name1':'Spent','Name2':'Received'})
.rename_axis(None, 1)
.reset_index())
print (df)
Name Spent Received
0 Eva 379 0
1 Jack 150 554
2 Laura 0 334
3 Sara 0 120
4 Tom 554 75
另一个带有双 groupby
和 concat
的解决方案:
df = (pd.concat([df.groupby('Name1')['amount'].sum(),
df.groupby('Name2')['amount'].sum()],
axis=1,
keys=('Spent','Received'))
.fillna(0)
.rename_axis('Name')
.reset_index())
print (df)
Name Spent Received
0 Eva 379.0 0.0
1 Jack 150.0 554.0
2 Laura 0.0 334.0
3 Sara 0.0 120.0
4 Tom 554.0 75.0
关于Python:如何对 Pandas 中的人之间的付款进行分组和求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53009838/