Создание pandas.pivot_table наблюдается =False создание отсутствующих столбцов

#python #pandas #dataframe #pivot-table

#python #pandas #фрейм данных #сводная таблица

Вопрос:

Таким образом, предполагается, что при передаче аргумента observed=False в pandas.pivot_table должен создавать отсутствующие столбцы, но это не так.

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

 import pandas as pd
df = pd.DataFrame([["user_1", 23],
                   ["user_1", 22],
                   ["user_2", 21]],
                  columns=["user", "hour"]).set_index("user")
df["hour"] = pd.Categorical.from_codes(df["hour"], categories=range(24))
df = df.assign(count=True)
df.pivot_table(columns="time",
               index="user",
               values="count",
               fill_value=False,
               observed=False,
              )
  

Результат, который я получаю:

         22      23
user        
user_1  True    True
user_2  True    False
  

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

         0       ... 22      23
user        
user_1  False   ... True    True
user_2  False   ... True    False
  

Ответ №1:

Вы можете пропустить Categorical и выполнить reindex включение axis=1 после поворота:

 df.pivot_table(columns="hour",
               index="user",
               values="count",
               fill_value=False,
               observed=False,
              ).reindex(range(24), axis=1, fill_value=False)


hour       0      1      2      3      4      5      6      7      8      9      10     11     12     13     14     15     16     17     18     19     20     21     22     23
user                                                                                                                                                                          
user_1  False  False  False  False  False  False  False  False  False  False  False  False  False  False  False  False  False  False  False  False  False  False   True   True
user_2  False  False  False  False  False  False  False  False  False  False  False  False  False  False  False  False  False  False  False  False  False   True  False  False