通过基于其他两个列中的值对现有列求和,将新的TOTALs列添加到pandas数据框中

时间:2019-04-01 00:24:19

标签: python pandas

我有一个熊猫数据框,如下所示:

    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”列中的值为条件的方法。 如何获得所需的输出?

1 个答案:

答案 0 :(得分:3)

您要使用groupbytransform来获取StatePC的总数。变换保持原始数据框的形状:

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