Python pandas Группировка агрегирует один столбец, получая среднее значение для остальных - PullRequest
0 голосов
/ 19 марта 2020

Глядя, чтобы сгруппировать мои поля на основе даты и получить среднее значение для всех столбцов, кроме двоичного столбца, который я хочу суммировать, чтобы получить счет.

Я знаю, что могу сделать это следующим образом:

newdf=df.groupby('date').agg({'var_a': 'mean', 'var_b': 'mean', 'var_c': 'mean', 'binary_var':'sum'})

Но есть около 50 столбцов (кроме двоичного), которые я хочу иметь в виду, и я чувствую, должен быть простой, более быстрый способ сделать это вместо того, чтобы писать каждый «заголовок столбца»: «среднее» для всех из них. Я попытался составить список имен столбцов, но когда я помещаю это в функцию agg, он говорит, что список - это тип, который не подлежит изменению.

Спасибо!

Ответы [ 2 ]

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

Примерно так может работать -

df = pd.DataFrame({'a':['a','a','b','b','b','b'], 'b':[10,20,30,40,20,10], 'c':[1,1,0,0,0,1]}, 'd':[20,30,10,15,34,10])
df 
   a   b  c   d
0  a  10  1  20
1  a  20  1  30
2  b  30  0  10
3  b  40  0  15
4  b  20  0  34
5  b  10  1  10

Предполагая, c - столбец двоичной переменной. Тогда

cols = [ val for val in df.columns if val != 'c']
temp = pd.concat([df.groupby(['a'])[cols].mean(), df.groupby(['a'])['c'].sum()], axis=1).reset_index()
temp 
   a     b      d  c
0  a  15.0  25.00  2
1  b  25.0  17.25  1
0 голосов
/ 19 марта 2020

В общем, я бы построил agg dict автоматически:

sum_cols = ['binary_val']
agg_dict = {col: 'sum' if col in sum_cols else 'mean'
               for col in df.columns if col != 'date'}

df.groupby('date').agg(agg_dict)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...