我如何在熊猫中分组然后对值求和? [复制]
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
【讨论】:
以上是关于我如何在熊猫中分组然后对值求和? [复制]的主要内容,如果未能解决你的问题,请参考以下文章