#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