我有一只熊猫的资料如下:
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可以具有相同的名称(例如:上面的‘’在两个不同的状态'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]
})我试着用累积量
df['cumsum'] = df['Votes'].cumsum()但是这会产生一个累积的和,我看不出有一种方法可以对列'State‘和列'pc’中的值进行条件化。我怎么做才能得到想要的输出呢?
发布于 2019-04-01 00:28:34
您希望使用groupby和transform来获得每个State和PC的总数。Transform保持原始dataframe的形状:
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 141https://stackoverflow.com/questions/55446681
复制相似问题