Python pandas поля сводных таблиц keyError - PullRequest
0 голосов
/ 23 января 2020

Рассмотрим следующий кадр данных:

test = pd.DataFrame({'A': [datetime.datetime.now(), datetime.datetime.now()], 'B': [1, 2]})

Если я использую pivot_table, как показано ниже, то все в порядке:

test.pivot_table(index = 'A', aggfunc = {'B': 'mean'}, margins = True)

Однако, если я сделаю следующее, я смогу ' t set margins = True (выдает ошибку KeyError: 'A'):

test.pivot_table(index = test['A'], aggfunc = {'B': 'mean'}, margins = True)

Я действительно запутался. Допустим, мне нужно сделать что-то вроде ниже И нужно установить margin = True. Это невозможно?

test.pivot_table(index = test['A'].dt.year, aggfunc = {'B': 'mean'}, margins = True)

1 Ответ

1 голос
/ 23 января 2020

Попробуйте:

test['Ax']=test['A'].dt.year

test.pivot_table(index = 'Ax' , aggfunc = 'mean', values='B', margins = True)

Выходы:

        B
Ax
2020  1.5
All   1.5

Объяснение : если вы не передадите values, по умолчанию будет df.columns (все столбцы dataframe, над которыми вы вращаетесь). https://github.com/pandas-dev/pandas/blob/v0.25.3/pandas/core/reshape/pivot.py#L87

Таким образом, технически, не передавая values, вы передавали ВСЕ столбцы в values, но в то же время обеспечивали функцию только для одного, так что вот где это KeyError исходил от.

Источник здесь странным образом отличается от документации: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.pivot_table.html

...