Как создать другой столбец, содержащий операцию, основанную на двух разных значениях одного и того же категориального столбца в кадре данных pandas? - PullRequest
1 голос
/ 07 марта 2020

Мой фрейм данных выглядит так:

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'}), но это дает мне только фрейм данных с Местами и сумма всех соответствующих ей сумм. Я знаю, что это неправильно.

Логика c, которую я до сих пор придумал:

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

, и я, честно говоря, не могу найти способ кодировать эту часть. Как я могу прийти к этой последней колонке против каждого места и человека? Я действительно озадачен в этом пункте.

Буду искренне признателен за любую помощь!

1 Ответ

1 голос
/ 07 марта 2020

Вы можете pivot и затем получить разницу, а затем переименовать, как вы wi sh:

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
...