Разделить датафрейм и сумму [панды] - PullRequest
0 голосов
/ 29 июня 2018

У меня есть следующий фрейм данных (фиктивные данные):

            score   GDP
country     
Bangladesh  6      12
Bolivia     4      10
Nigeria     3      9
Pakistan    2      3
Ghana       1      3
India       1      3
Algeria     1      3

И я хочу разделить его на две группы в зависимости от ВВП и суммировать баллы каждой группы. При условии, что ВВП меньше 9:

           sum_score
country     
rich       13      
poor        5     

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вы можете агрегировать по логической маске и использовать только последний индекс переименования:

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
0 голосов
/ 29 июня 2018

Вы можете использовать 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...