Сумма по группам, сортировка и транспонирование - PullRequest
2 голосов
/ 09 июля 2019

Я новичок в функциональности панд и групповых.У меня есть Dataframe, как показано ниже, который представляет собой данные транзакции клиента, как показано ниже, я хочу выяснить два верхних Dprtmnt на Cus_No на основе их общего Amount.

Cus_No     Date     Dprtmnt          Amount
111     6-Jun-18      AAA              100
111     6-Jun-18      AAA              50
111     8-Jun-18      BBB              125
111     8-Aug-18      CCC              130
111     12-Dec-18     BBB              200
111     15-Feb-17     AAA              10
111     18-Jan-18     AAA              20
222     6-Jun-18      DDD              100
222     6-Jun-18      AAA              50
222     8-Jun-18      AAA              125
222     8-Aug-18      DDD              130
222     12-Dec-18     AAA              200
222     15-Feb-17     CCC              10
222     18-Jan-18     CCC              20

Мой ожидаемый результат показан ниже.

    Cus_No     Top1D Top1Sum    Top1_Frqnc  Top2D   Top2Sum  Top2_Frqnc
       111      BBB     325          2        AAA      180       4
       222      AAA     375          3        DDD      230       2

1 Ответ

1 голос
/ 09 июля 2019

Первое агрегирование по GroupBy.agg с sum и size, сортировка и получение top2 по GroupBy.head, последнее изменение по DataFrame.unstack и создайте новые имена столбцов с помощью map и join:

df = (df.groupby(['Cus_No','Dprtmnt'])['Amount']
        .agg([('Sum','sum'),('Frqnc','size')])
        .sort_values('Sum', ascending=False)
        .groupby(level=0).head(2))

df = (df.set_index(df.groupby(level=0).cumcount().add(1).astype(str), append=True)
        .reset_index(level=1)
        .unstack()
        .sort_index(axis=1, level=1))
df.columns = df.columns.map(''.join)
df = df.reset_index()
print (df)
RangeIndex(start=0, stop=14, step=1)
   Cus_No Dprtmnt1  Frqnc1  Sum1 Dprtmnt2  Frqnc2  Sum2
0     111      BBB       2   325      AAA       4   180
1     222      AAA       3   375      DDD       2   230
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...