Pandas DataFrame добавляет сумму за идентификатор

1

У меня есть df:

idx total
1   5
1   10
1   2
2   10
2   10
2   55

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

idx total sum   avg
1   5     17    5.66
1   10    17    5.66
1   2     17    5.66
2   10    75    25
2   10    75    25
2   55    75    25
Теги:
pandas
numpy
pandas-groupby

2 ответа

2

Обычно мы должны использовать transform, но поскольку transform не может принимать функцию списка с функцией groupby, мы используем agg + reindex

df.groupby('idx').total.agg(['sum','mean']).reindex(df.idx).reset_index()
Out[64]: 
   idx  sum       mean
0    1   17   5.666667
1    1   17   5.666667
2    1   17   5.666667
3    2   75  25.000000
4    2   75  25.000000
5    2   75  25.000000

#df.groupby('idx').total.agg(['sum','mean']).reindex(df.idx).reset_index().assign(Todat=df.total.values)
1

Вы можете использовать groupby с agg затем merge:

df.merge(df.groupby('idx')['total']
           .agg(['sum','mean']), 
         left_on='idx', 
         right_index=True)

Выход:

   idx  total  sum       mean
0    1      5   17   5.666667
1    1     10   17   5.666667
2    1      2   17   5.666667
3    2     10   75  25.000000
4    2     10   75  25.000000
5    2     55   75  25.000000

Ещё вопросы

Сообщество Overcoder
Наверх
Меню