Как применить статистическую функцию ко всем столбцам сводной таблицы в Pandas - PullRequest
1 голос
/ 16 января 2020

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

+--------+------------+------------+
| ad_id  | entreprise | date       |
+--------+------------+------------+
| 172788 | A          | 2020-01-28 |
| 172931 | A          | 2020-01-26 |
| 172793 | B          | 2020-01-26 |
| 172768 | C          | 2020-01-19 |
| 173219 | C          | 2020-01-14 |
| 173213 | D          | 2020-01-13 |
+--------+------------+------------+

Мой код сводной таблицы следующий:

my_pivot_table = pd.pivot_table(df[(df['date'] >= some_date) & ['date'] <= some_other_date)], 
                                values=['ad_id'], index=['entreprise'], 
                                columns=['year', 'month'], aggfunc=['count'])

Полученная таблица выглядит следующим образом:

+-------------+---------+----------+-----+----------+
|             |  2018   |          |     |          |
+-------------+---------+----------+-----+----------+
| entreprise  | january | february | ... | december |
| A           | 12      | 10       | ... | 8        |
| B           | 24      | 12       | ... | 3        |
| ...         | ...     | ...      | ... | ...      |
| D           | 31      | 18       | ... | 24       |
+-------------+---------+----------+-----+----------+

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

Я пытался возиться с параметром aggfun c pivot_table, а также попытаться добавить средний столбец к исходному фрейму данных, но безуспешно.

Заранее спасибо!

1 Ответ

3 голосов
/ 16 января 2020

Поскольку вы получаете Multiindex таблицу после pivot_table, вы можете использовать:

df1 = df.mean(axis=1, level=0)
df1.columns = pd.MultiIndex.from_product([df1.columns, ['mean']])

Или:

df2 = df.mean(axis=1, level=1)
df2.columns = pd.MultiIndex.from_product([['all_years'], df2.columns])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...