Groupby и count () на кадре данных, имеющем две категориальные переменные [duplicate]

Justin спросил: 28 апреля 2018 в 09:11 в: python

У этого вопроса уже есть ответ:

  • Converting a Pandas GroupBy object to DataFrame 7 ответов

У меня есть набор данных, который мне нужно сгруппировать () и найти количество каждой уникальной комбинации.

    body-style        make
0  convertible  alfa-romeo
1  convertible  alfa-romeo
2    hatchback  alfa-romeo
3        sedan        audi
4        sedan        audi

Мне нужно создать вывод, как показано ниже:

             make   body-style   count
0     alfa-romero  convertible       2
1     alfa-romero    hatchback       1
2            audi    sedan           2

Пробовал приведенный ниже код:

body = pd.DataFrame({'make':['alfa-romeo','alfa-romeo','alfa-romeo','audi','audi'], 'body-style':['convertible','convertible','hatchback','sedan','sedan']})body.groupby(by=['make','body-style'], as_index=False).count()

Это агрегирование вызывает ошибку " индекс индекса вне диапазона ". Однако, когда я удаляю любой из столбцов из предложения groupby, он может дать мне подсчеты, сгруппированные по остальному столбцу.

Если я удалю as_index = False , нет но результирующий объект будет иметь оба столбца - make и body-style как часть индекса, и там не будет никаких данных подсчета.

Я могу добавить еще один столбец в datframe, заполнить его 1s и взять sum() вместо count() в groupby. Но хотелось бы знать, есть ли более чистый способ сделать это.


1 ответ

Есть решение
MaxU ответил: 28 апреля 2018 в 09:17

вы можете использовать GroupBy.count(), только если у вас есть хотя бы один столбец, который не использовался для группировки.

Если вы группируете все столбцы в DF - используйте :

In [119]: body.groupby(['make','body-style']).size().reset_index(name='count')
Out[119]:
         make   body-style  count
0  alfa-romeo  convertible      2
1  alfa-romeo    hatchback      1
2        audi        sedan      2
Sasha Tsukanov ответил: 28 апреля 2018 в 09:15
Не могли бы вы пояснить, почему ваше решение работает, а код в вопросе - нет?
MaxU ответил: 28 апреля 2018 в 09:17
@SashaTsukanov, конечно, добавил короткое описание ...