Python:如何对 Pandas 中的人之间的付款进行分组和求和?

标签 python pandas group-by

我有一个数据框df,其中包含从Name1Name2的付款信息,其中包含一些用户的信息。

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

另一个带有双 groupbyconcat 的解决方案:

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/

相关文章:

mysql - 在 MySQL 中使用 Group by 和 Order by

apache-spark - 迭代配对 RDD (Pyspark) 的值并替换空值

mysql - 查询存在最大(日期)的记录

python - 更改 Seaborn 点图中 x 轴上两个相邻值之间的间隙

没有完整路径的python tarfile

python - pandas MultiIndex 滚动平均值

python - 对数组中的项进行求和 - 在 DataFrame 中 - 在 groupby 中

Python Pandas : differences between two dates in weeks?

python - 非常轻量级的网站框架推荐

Python子类计数器