我如何在熊猫中分组然后对值求和? [复制]

Posted

技术标签:

【中文标题】我如何在熊猫中分组然后对值求和? [复制]【英文标题】:How can I groupby in pandas and then sum values? [duplicate] 【发布时间】:2019-03-15 01:43:49 【问题描述】:

我遇到了下一个问题:我在 pandas 中有一个数据框,其属性为“features”,另一个属性为“VOTES”。 '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       |
+----------+---------+

【问题讨论】:

【参考方案1】:

您可以添加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 返回与原始DataFrame 大小相同的聚合值Series

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】:

你可以这样做:

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

输出:

  features  VOTES
0        A      6
1        C      9
2        V      3

【讨论】:

【参考方案3】:

从您的问题中并不清楚您到底需要什么。您正在进行的分组是可以的,但由于某种原因,您为其分配了同一数据帧的列。我猜你最终需要加入。检查这个:

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

【讨论】:

以上是关于我如何在熊猫中分组然后对值求和? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Scala:如何按键分组并在 scala 中对值求和并以预期的返回类型返回列表

如何在SQL中对相邻行进行分组并对数据求和

如何分组、计数或求和,然后在 Pandas 中绘制两条线?

按键对哈希进行分组并对值求和

如何使用熊猫对与给定条件匹配的列中的值求和?

熊猫数据框分组求和