Настраиваемая агрегация для полей в фрейме данных - PullRequest
1 голос
/ 03 мая 2020

У меня есть фрейм данных:

time    action    value
--------------------------
10:00   FG        2
10:00   Ast       0
09:45   Miss      0
09:40   TO        0
09:40   Steal     0
09:30   FG        2
09:30   FT        1

Я бы хотел сгруппировать это по time, но двумя способами:

  • action должно быть превращается в список
  • value следует суммировать

Ожидаемый результат:

time    action    value
--------------------------
10:00   [FG,Ast]  2
09:45   Miss      0
09:40   [TO,Steal]0
09:30   [FG,FT]   3

Я могу сделать их каждый по отдельности:

  • список: df.groupby('time')['action'].apply(list).reset_index()
  • sum: `df.groupby ('action') ['value']. ​​Sum ()

Как мне это сделать они оба вместе?

1 Ответ

2 голосов
/ 03 мая 2020

Использование groupby.agg:

df = df.groupby('time', as_index=False).agg({'action':list, 'value':np.sum})

print(df)
    time       action  value
0  09:30     [FG, FT]      3
1  09:40  [TO, Steal]      0
2  09:45       [Miss]      0
3  10:00    [FG, Ast]      2
...