Pandas - столбцы GroupBy 2 - невозможно восстановить индекс - PullRequest
4 голосов
/ 19 марта 2020

У меня есть DF следующим образом:

Date Bought | Fruit
2018-01       Apple
2018-02       Orange
2018-02       Orange
2018-02       Lemon

I wi sh, чтобы сгруппировать данные по «Дата покупки» и «Фрукты» и подсчитать вхождения.

Ожидаемый результат:

Date Bought | Fruit | Count
2018-01       Apple     1
2018-02       Orange    2
2018-02       Lemon     1

Что я получаю:

Date Bought | Fruit | Count
2018-01       Apple     1
2018-02       Orange    2
              Lemon     1

Используемый код:

Initial attempt:
df.groupby(['Date Bought','Fruit'])['Fruit'].agg('count')

#2
df.groupby(['Date Bought','Fruit'])['Fruit'].agg('count').reset_index()
ERROR: Cannot insert Fruit, already exists

#3
df.groupby(['Date Bought','Fruit'])['Fruit'].agg('count').reset_index(inplace=True)
ERROR: Type Error: Cannot reset_index inplace on a Series to create a DataFrame

Документация показывает, что функция groupby возвращает «объект groupby», а не стандартный DF. Как я могу сгруппировать данные, как указано выше, и сохранить формат DF?

1 Ответ

6 голосов
/ 19 марта 2020

Проблема здесь в том, что при сбросе индекса вы получите 2 столбца с одинаковым именем. Поскольку работа с Series возможна, установите параметр name в Series.reset_index:

df1 = (df.groupby(['Date Bought','Fruit'], sort=False)['Fruit']
         .agg('count')
         .reset_index(name='Count'))
print (df1)
  Date Bought   Fruit  Count
0     2018-01   Apple      1
1     2018-02  Orange      2
2     2018-02   Lemon      1
...