我遇到下一个问题:我在熊猫中有一个数据框,其属性为“功能”,另一个属性为“投票”。 “ 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 |
+----------+---------+
答案 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