Получить максимальное количество агрегаций для нескольких столбцов в объекте pandas groupby - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть фрейм данных, и я хочу сгруппировать по одному столбцу «Компания», объединить несколько столбцов и найти компанию с максимальным значением для каждого агрегированного столбца.

  Company   performed    Requests     Request_Id  Num_of_refunds
0  A         7             60          U9             3
1  A         90            6           U10            2
2  B         89            6           ZX9            10
3  B         2             3           OOF            9         
4  B         22            0           LQI            4 
5  D         7             5           QW             3
6  D         87            2           XB             5

Я хочу использовать групповую передачу с несколькими агрегациями, которые суммы «выполнено», «Запросы», «Num_of_refunds» и считает "Request_Id"

Я хочу получить название компании с максимальным значением каждой суммы и суммированным возвратом

performed    Requests     Request_Id  Num_of_refunds
 max          max          max           max
 B: 103       A: 66        B: 3          B: 23

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Вы можете использовать GroupBy.agg с sum для числовых столбцов и count для строк, а затем получить Company по максимальным значениям DataFrame.idxmax и объединить сmax конвертируется в string с, в конце при необходимости конвертируется Series в одну строку DataFrame с Series.to_frame и транспонируется:

f = lambda x: x.sum() if np.issubdtype(x.dtype, np.number) else x.count()
df1 = df.groupby('Company').agg(f)
print (df1)
         performed  Requests  Request_Id  Num_of_refunds
Company                                                 
A               97        66           2               5
B              113         9           3              23
D               94         7           2               8

df2 = (df1.idxmax() + ': ' + df1.max().astype(str)).to_frame().T
print (df2)
  performed Requests Request_Id Num_of_refunds
0    B: 113    A: 66       B: 3          B: 23
0 голосов
/ 09 апреля 2019
df.groupby(['Company']).agg({'performed':'sum'
    , 'Requests':'sum'
    , 'Num_of_refunds':'sum'
    ,'Request_Id':'count'})
...