Назначьте разные функции агрегирования различным функциям в pandas groupby - PullRequest
4 голосов
/ 19 февраля 2020

У меня есть данные как ниже (вместо 4 столбцов у меня есть 100 столбцов)

raw_data = { 
        'age': [52, 52, 24, 24, 24], 
        'a': [4, 24, 31, 2, 3],
        'b': [3, 2, 3, 4, 3],
        'c': [2, 5, 8, 2, 1]}
df = pd.DataFrame(raw_data, columns = [ 'age', 'a', 'b', 'c'])

, что приводит к

    age a   b   c
0   52  4   3   2
1   52  24  2   5
2   24  31  3   8
3   24  2   4   2
4   24  3   3   1

Я хочу сгруппировать данные по возрасту и найти среднее некоторых функций и сумма оставшихся функций. Я пробовал это:

feats = ['a', 'b']
df.groupby('age').agg({feats:['mean'], 'c':['sum']})

Поскольку у меня есть 100 функций в реальных данных, я не могу назначить функции (у меня есть несколько функций для назначения: RMS, Kurtosis, Energy Index, et c) для отдельной функции (Я могу, но это очень много времени и не умный) Есть ли способ, которым я могу достичь этого?

1 Ответ

4 голосов
/ 19 февраля 2020

Использование словарного понимания.

agg_d = {i:'mean' for i in feats}
agg_d['c'] = 'sum'

df.groupby('age').agg(agg_d)

Вывод:

      a         b   c
age                  
24   12  3.333333  11
52   14  2.500000   7

Обновление, и вы можете использовать несколько функций агрегирования, используя список:

agg_d = {i:['sum','max','first', lambda x: sum(x**2)] for i in feats}
agg_d['c'] = 'sum'
...