У меня есть 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
Заранее спасибо за помощь!
print(df.groupby(by=["SINID"])["MONTREGL"].sum())
?
можешь сделать print(df.info())
и поделиться получившимся отпечатком
Решение, предложенное ранее @yatu, работало, но не в производстве dfd= df.groupby('SINID').MONTREGL.sum().reset_index().assign(EXTRA=df.EXTRA.unique())
Я получаю сообщение об ошибке Length of values does not match length of index
мое предложение состояло бы в том, чтобы отфильтровать ваш фрейм данных с условиями, связанными с другими столбцами, а затем применить функцию суммы,
Это выглядит примерно так.
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()
На аналогичный вопрос дан ответ по следующей ссылке (проверьте ответ Алекса Райли):
Как суммировать значения в столбце, соответствующие заданному условию, с помощью панд?
Удачи,
Вы пробовали использовать
groupby
?