分割数据框并求和[pandas]

时间:2018-06-29 12:11:58

标签: python pandas

我有以下数据框(虚拟数据):

            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     

2 个答案:

答案 0 :(得分:3)

您可以使用np.where来设置richpoor类别,然后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