我有一个熊猫数据框,如下所示:
df = pd.DataFrame({
'State':['am','am','am','am','am','am','fg','fg','fg','fg','fg','fg','fg'],
'PC':['A','A','A','B','B','B','C','C','C','A','A','A','A'],
'Party':['alpha','beta','delta','alpha','beta','gamma','alpha','beta','kappa','alpha','gamma','kappa','lambda'],
'Votes':[10,4,50,11,2,60,3,1,70,12,34,52,43]
})
我想添加一个总计列,其中将包含每台PC的投票总数。请注意,PC可以具有相同的名称(例如,上面的“ A”处于两个不同的状态“ am”和“ fg”,因此我们要对它们进行单独求和,因为它们是不同的PC)。
总之,这是我想要的输出:
df_out = pd.DataFrame({
'State':['am','am','am','am','am','am','fg','fg','fg','fg','fg','fg','fg'],
'PC':['A','A','A','B','B','B','C','C','C','A','A','A','A'],
'Party':['alpha','beta','delta','alpha','beta','gamma','alpha','beta','kappa','alpha','gamma','kappa','lambda'],
'Votes':[10,4,50,11,2,60,3,1,70,12,34,52,43],
'Total':[64,64,64,73,73,73,74,74,74,141,141,141,141]
})
我正尝试使用cumsum
df['cumsum'] = df['Votes'].cumsum()
但是这产生了一个累加的总和,我看不到一种以“状态”列和“ pc”列中的值为条件的方法。 如何获得所需的输出?
答案 0 :(得分:3)
您要使用groupby
和transform
来获取State
和PC
的总数。变换保持原始数据框的形状:
df['Total'] = df.groupby(['State', 'PC']).Votes.transform('sum')
print(df)
State PC Party Votes Total
0 am A alpha 10 64
1 am A beta 4 64
2 am A delta 50 64
3 am B alpha 11 73
4 am B beta 2 73
5 am B gamma 60 73
6 fg C alpha 3 74
7 fg C beta 1 74
8 fg C kappa 70 74
9 fg A alpha 12 141
10 fg A gamma 34 141
11 fg A kappa 52 141
12 fg A lambda 43 141