如何在大熊猫中分组然后求和?

时间:2018-10-10 07:52:55

标签: python pandas dataframe group-by sum

我遇到下一个问题:我在熊猫中有一个数据框,其属性为“功能”,另一个属性为“投票”。 “ VOTES”是数字,“ features”是在数据框中重复的字符串。我想根据功能分组并汇总VOTES的值,以获得下一个结果:

最初的数据框:

+----------+---------+
| features | VOTES   |
+----------+---------+
| A        | 4       |
+----------+---------+
| V        | 3       |
+----------+---------+
| A        | 2       |
+----------+---------+
| C        | 9       |
+----------+---------+

我做了以下操作,但在VOTES列上获得了NaN值。

dataframe_clusters['VOTES'] = dataframe_clusters.groupby('features')['VOTES'].sum()

我想得到下一个结果:

+----------+---------+
| features | VOTES   |
+----------+---------+
| A        | 6       |
+----------+---------+
| V        | 3       |
+----------+---------+
| C        | 9       |
+----------+---------+

3 个答案:

答案 0 :(得分:1)

您可以通过以下方式进行:

dataframe_clusters.groupby('features').sum().reset_index()

输出:

  features  VOTES
0        A      6
1        C      9
2        V      3

答案 1 :(得分:0)

您可以添加reset_index或参数as_index=False,也可以为参数features添加sort=False

df = dataframe_clusters.groupby('features', sort=False)['VOTES'].sum().reset_index()

df = dataframe_clusters.groupby('features', as_index=False, sort=False)['VOTES'].sum()

print (df)
  features  VOTES
0        A      6
1        V      3
2        C      9

如果可能希望分配给新列,请使用GroupBy.transform返回与原始Series大小相同的聚合值DataFrame

dataframe_clusters['VOTES'] = dataframe_clusters.groupby('features')['VOTES'].transform('sum')
print (dataframe_clusters)

  features  VOTES
0        A      6
1        V      3
2        A      6
3        C      9

答案 2 :(得分:0)

从您的问题中并不清楚您到底需要什么。您正在执行的分组是可以的,但是由于某些原因,您要为其分配同一dataFrame的列。我猜您最后需要加入。检查一下:

import pandas as pd
df = pd.DataFrame(data={'features':['A','V','A','C'], 'VOTES':[4,3,2,9]})
totals = df.groupby('features').sum()
print(df)
print(totals)
joined = df.join(totals, on='features', rsuffix='_total')
print(joined)

它将为您提供:

   VOTES features
0      4        A
1      3        V
2      2        A
3      9        C
          VOTES
features       
A             6
C             9
V             3
   VOTES features  VOTES_total
0      4        A            6
1      3        V            3
2      2        A            6
3      9        C            9