2016-07-10 3 views
-2

Мои Панды Dataframe в этом формате:Панды: Суммируйте таблицу на основе значения столбца

A 5 
A 7 
A 4 
B 2 
B 7 
C 8 

Как я могу подытожить так:

A 16 
B 9 
C 8 
+0

выглядит очень близко или дубликатом http://stackoverflow.com/questions/14941366/панды-сортировка по групповому агрегатно-и-колонке. – alecxe

+1

Вы читали документ? [link] (http://pandas.pydata.org/pandas-docs/stable/groupby.html) – Valilutzik

ответ

4

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

col1 col2 
0 A 5 
1 A 7 
2 A 4 
3 B 2 
4 B 7 
5 C 8 

df.groupby('col1')['col2'].sum() 
col1 
A 16 
B  9 
C  8 

Если вы хотите оставить столбцы такими, какие они есть, как вы упомянули в своем комментарии, вы можете конвертировать groupby объект к новому кадру данных, если это то, что вы имели в виду. Таким образом, вы можете сделать это вместо того, чтобы:

new = pd.DataFrame({'col2' : df.groupby('col1')['col2'].sum()}).reset_index() 
new 
    col1 col2 
0 A 16 
1 B 9 
2 C 8 
+0

Спасибо за быстрый ответ. Одна небольшая проблема: столбцы больше не называются «col1» и «col2». Можно ли добавить еще одну строку кода, чтобы столбцы сохраняли свои имена? –

+0

@NedHulton Я добавил новое решение для своего ответа на основе вашего комментария. Это то, что вы имели в виду? –

1

Я думаю, вы могли бы использовать для pivot_table, что с sum как функция агрегации:

In [9]: df 
Out[9]: 
    0 1 
0 A 5 
1 A 7 
2 A 4 
3 B 2 
4 B 7 
5 C 8 

In [10]: df.pivot_table(index=0, aggfunc=sum).reset_index() 
Out[10]: 
    0 1 
0 A 16 
1 B 9 
2 C 8