我有以下数据框(虚拟数据):
score GDP
country
Bangladesh 6 12
Bolivia 4 10
Nigeria 3 9
Pakistan 2 3
Ghana 1 3
India 1 3
Algeria 1 3
我想根据GDP将其分为两部分,并对每组的得分求和。在GDP小于9的情况下:
sum_score
country
rich 13
poor 5
答案 0 :(得分:3)
您可以使用np.where
来设置rich
和poor
类别,然后groupby
将该类别并获得总和:
df['country_cat'] = np.where(df.GDP < 9, 'poor', 'rich')
df.groupby('country_cat')['score'].sum()
country_cat
poor 5
rich 13
您也可以一步一步完成操作,方法是不为类别创建多余的列(但IMO的代码可读性降低):
df.groupby(np.where(df.GDP < 9, 'poor', 'rich'))['score'].sum()
答案 1 :(得分:1)
您可以按布尔值掩码进行汇总,最后只能重命名索引:
a = df.groupby(df.GDP < 9)['score'].sum().rename({True:'rich', False:'poor'})
print (a)
GDP
poor 13
rich 5
Name: score, dtype: int64
最后一列DataFrame
添加Series.to_frame
:
df = a.to_frame('sum_score')
print (df)
sum_score
GDP
poor 13
rich 5