pandas pivot_table возвращает пустой фрейм данных

Я получаю пустой фрейм данных, когда пытаюсь сгруппировать значения с помощью pivot_table. Давайте сначала создадим некоторые глупые данные:

import pandas as pd
df = pd.DataFrame({"size":['large','middle','xsmall','large','middle','small'],
                   "color":['blue','blue','red','black','red','red']})

Когда я использую:

df1 = df.pivot_table(index='size', aggfunc='count')

возвращает мне то, что я ожидаю. Теперь я хотел бы иметь полную сводную таблицу с цветом в качестве столбца:

df2 = df.pivot_table(index='size', aggfunc='count',columns='color')

Но это приводит к пустому фрейму данных. Зачем? Как я могу получить простую сводную таблицу, которая подсчитывает мне количество комбинаций? Спасибо.

2 ответа

Вам нужно использовать len как aggfunc, вот так

df.pivot_table(index='size', aggfunc=len, columns='color')

Если вы хотите использовать счетчик, вот шаги:

  1. Сначала добавьте частоту столбцов, например так:

    df['freq'] = df.groupby(['color', 'size'])['color'].transform('count')
    
  2. Затем создайте сводную таблицу, используя столбец частоты:

    df.pivot_table(values='freq', index='size', aggfunc='count', columns='color')
    

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

Добавить столбец -

df['freq']=1

Ваш код будет работать.

Другие вопросы по тегам