首页 > 解决方案 > 如何创建另一列,其中包含基于熊猫数据框中同一分类列的两个不同值的操作?

问题描述

我的数据框如下所示:

Person  Payment_Type   Amount  Place
Adam     C               500     X
Adam     D               200     X
Adam     C               80      Y
Adam     D               30      Y
Bob      C               100     Y
Bob      D               20      Y

我想创建一个列Final_Payment,使其C-D对每个人的每个地方都相等。例如:

Person    Place    Final_Payment
Adam        X         300
Adam        Y         50
Bob         Y         80

现在,我尝试groupby写下金额和地点:

sample=sample.groupby(['Place']).agg({'Amount':'sum'}) 但这只会给我一个带有 Places 的数据框以及与之对应的所有 Amounts 的总和。我知道这是错误的。

到目前为止,我提出的逻辑是:

for Person, Place in Dataframe
   Final_Payment= Amount at C - Amount at D
end

老实说,我想不出一种方法来编码这部分。我怎样才能到达针对每个地方和每个人的最后一列?在这一点上我真的很难过。

我真的很感激我能得到的任何帮助!

标签: pythonpandasdataframepandas-groupby

解决方案


您可以pivot然后得到差异,然后根据需要重命名:

m = df.pivot_table(index=['Person','Place'],columns='Payment_Type',values='Amount')
out = (m['C']-m['D']).rename('Final_Payment').reset_index()

print(out)

  Person Place  Final_Payment
0   Adam     X          300.0
1   Adam     Y           50.0
2    Bob     Y           80.0

这是旋转 df 的样子:

print(m)

Payment_Type    C    D
Person Place          
Adam   X      500  200
       Y       80   30
Bob    Y      100   20

推荐阅读