Столбец суммы на основе другого столбца в Pandas DataFrame

У меня есть pandas DataFrame следующим образом:

>>> df = pd.DataFrame({'MONTREGL':[10,10,2222,35,200,56,5555],'SINID':['aaa','aaa','aaa','bbb','bbb','ccc','ccc'],'EXTRA':[400,400,400,500,500,333,333]})
>>> df
   MONTREGL SINID EXTRA
0        10   aaa   400
1        10   aaa   400
2      2222   aaa   400
3        35   bbb   500
4       200   bbb   500
5        56   ccc   333
6      5555   ccc   333

Я хочу суммировать столбец MONTREGL для каждой группы по SINID...

Итак, я получаю 2242 для aaa и так далее... ТАКЖЕ я хочу сохранить значение столбца EXTRA.

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

   MONTREGL SINID EXTRA
0      2242   aaa   400
1       235   bbb   500
2      5611   ccc   333

Заранее спасибо за помощь!

Вы пробовали использовать groupby?

yatu 29.05.2019 14:26
print(df.groupby(by=["SINID"])["MONTREGL"].sum()) ?
Rakesh 29.05.2019 14:27

можешь сделать print(df.info()) и поделиться получившимся отпечатком

dimitris_ps 29.05.2019 15:11

Решение, предложенное ранее @yatu, работало, но не в производстве dfd= df.groupby('SINID').MONTREGL.sum().reset_index().assign(EXTR‌​A=df.EXTRA.unique()) Я получаю сообщение об ошибке Length of values does not match length of index

Soufiane Sabiri 29.05.2019 15:19
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
7
5
23 613
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Это выглядит примерно так.

import pandas as pd

df=pd.Dataframe({a:[1,2,3],b:[2001,2015,2019],c:[1,0,1]})

aux=df[df.c>0]

sa=aux.a.sum()

sb=aux.b.sum()

Мой синтаксис может быть неправильным (я не запускал код), но он, вероятно, сработает и приведет вас к вашему ответу.

Удачи.

Код ниже работает для вашего примера:

df1 = df.groupby(["SINID"]).sum()
df1['EXTRA'] = df.groupby(["SINID"]).mean()['EXTRA']

Результат :

       MONTREGL  EXTRA
SINID                 
aaa        2242  400.0
bbb         235  500.0
ccc        5611  333.0
Ответ принят как подходящий

В итоге я использовал этот скрипт:

dff = df.groupby(["SINID","EXTRA"]).MONTREGL.sum().reset_index()

И это работает в этом тесте и производстве.

Я знаю, что этот пост устарел, но это может быть полезно для других:

Используя лок:df.loc[df['SINID'] == aaa].MONTREGL.sum()

Использование группы:df.groupby('SINID')['MONTREGL'].sum()

На аналогичный вопрос дан ответ по следующей ссылке (проверьте ответ Алекса Райли):

Как суммировать значения в столбце, соответствующие заданному условию, с помощью панд?

Удачи,

Другие вопросы по теме