У меня есть фрейм данных, который я преобразовал в сводную таблицу с помощью метода pd.pivot_table и функции агрегирования суммы:
summary = pd.pivot_table(df,
index=["Region"],
columns=["Product"],
values=['Price'],
aggfunc=[np.sum],
fill_value=0,
margins=True,
margins_name="Total"
)
Я получил такой вывод:
Я хотел бы добавить еще одну сводную таблицу, которая отображает процент от общей суммы, рассчитанный в предыдущей сводной таблице для каждой из категорий. Все это должно составлять в сумме 100% и выглядеть следующим образом.
Я пробовал следующий обходной путь, который нашел в stackoverflow:
total = df['Price'].sum()
table = pd.pivot_table(DF,
index=["Region"],
columns=["Product"],
values=['Price'],
aggfunc=[np.sum,
(lambda x: sum(x)/total*100)
],
fill_value=0,
margins=True,
margins_name="Total"
)
Это подсчитало проценты, но они в сумме составляют только 85% ...
Было бы здорово, если бы вам не приходилось вычислять общую сумму за пределами сводной таблицы, а просто иметь возможность вызывать общую сумму из первой опорной таблицы. Но даже если мне придется вычислять отдельно, как в приведенном выше коде, пока он составляет 100%, это все равно будет здорово.
Заранее спасибо!