Фильтрация результатов после использования группировки по нескольким столбцам - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть фрейм данных, который выглядит следующим образом:

Type     Months     Year    Marks
 a        1          2018     64
 a        1          2017     69
 a        1          2016     69
 b        1          2018     78
 b        1          2017     71
 b        1          2016     91
 c        1          2018     58
 c        1          2017     65
 c        1          2016     83

 a        2          2018     58
 a        2          2017     65
 a        2          2016     83
 a        3          2018     58
 a        3          2017     65
 a        3          2016     83

Я хочу сгруппировать по типам, месяцам, годам и суммировать оценки.

sumOfTypes = data.groupby(['Type','Months','Year'])['Marks'].sum()

Результаты выглядят следующим образом:

(a, 1, 2018)                  60
(a, 1, 2017)                  54
 .
 .
(c, 1, 2016)                  86           
(c, 2, 2018)                  89

Однако я хочу отфильтровать данные только для типов 'a' и 'b'.

Кроме того, я хочу, чтобы vut (c, 2, 2018) находился в разных столбцах данных, чтобы результат выглядел следующим образом:

df_grouped:

   Type     Months     Year    Marks    
    c         2        2018     89

Мой текущий код:

sumOfTypes = data.groupby(['Type','Months','Year'])['Marks'].sum()
df_grouped = pd.DataFrame(sumOfTypes)

1 Ответ

0 голосов
/ 11 декабря 2018

Добавьте as_index=False или reset_index для возврата DataFrame и затем отфильтруйте по boolean indexing с isin:

sumOfTypes = data.groupby(['Type','Months','Year'], as_index=False)['Marks'].sum()
#alternative
#sumOfTypes = data.groupby(['Type','Months','Year'])['Marks'].sum().reset_index()

df = sumOfTypes[sumOfTypes['Type'].isin(['a','b'])]

Или фильтрация по boolean indexing с MultiIndex Series, для выбора уровня использования get_level_values:

sumOfTypes = data.groupby(['Type','Months','Year'])['Marks'].sum()

s = sumOfTypes[sumOfTypes.index.get_level_values('Type').isin(['a','b'])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...