У меня есть сборка фрейма данных fromRecords набор запросов django, который я поворачиваю на 2 столбца, чтобы получить представление о нем на панели инструментов.
Мне удается получить глобальные суммы по строке и столбцу всей таблицы, но я пытаюсь получить сумму по первым столбцам сводной таблицы (суммарный итог по строке для первого столбца каждой группы).
Я абсолютно ничего не знаю о пандах, но я учусь.
Мой dataFrame выглядит так:
type amount source fund
0 Ressource Humaine CDD -36470.36 Expense fund2
1 Mission -1686.47 Expense fund2
2 Fonctionnement -817465.91 Expense fund1
3 Fonctionnement 1118691.65 Budget fund1
4 Fonctionnement -6000 Expense fund3
5 Fonctionnement -23621.83 Expense fund2
6 Frais de Gestion -53499 Expense fund2
7 Fonctionnement 15000 Budget fund3
8 Frais de Gestion 53499 Budget fund2
9 Fonctionnement 186718.78 Budget fund2
10 Mission 1686.47 Budget fund2
1 Ressource Humaine CDD 38676.53 Budget fund2
Чтобы получить обзор доступности по средствам на моей приборной панели, я поворачиваю ее следующим образом:
piv=cpd.pivot_table(index = "type", columns=["fund","source"], values = "amount", aggfunc='sum', margins=True, margins_name='Sum')
получить :
fund fund1 fund2 fund3
source Budget Expense Budget Expense Budget Expense
type
Fonctionnement 1118691.65 -817465.91 186718.78 -23621.83 15000.00 -6000.00
Frais de Gestion NaN NaN 53499.00 -53499.00 NaN NaN
Mission NaN NaN 1686.47 -1686.47 NaN NaN
Ressource Humaine CDD NaN NaN 38676.53 -36470.36 NaN NaN
(здесь пропущено общее количество, но оно у меня есть)
Я хотел бы приземлиться на что-то вроде:
fund fund1 fund2 fund3
source Budget Expense total fund1 Budget Expense total fund2 Budget Expense total fund3
type
Fonctionnement 1118691.65 -817465.91 301 226€ 186718.78 -23621.83 163 097€ 15000.00 -6000.00 9 000€
Frais de Gestion NaN NaN NaN 53499.00 -53499.00 0 NaN NaN NaN
Mission NaN NaN NaN 1686.47 -1686.47 0 NaN NaN NaN
Ressource Humaine CDD NaN NaN NaN 38676.53 -36470.36 2 207€ NaN NaN NaN
Я видел несколько советов с pandas concat для сводки по нескольким индексам (например: Промежуточные итоги сводной таблицы в Pandas)
Я пытаюсь зацикливаться по столбцам или читать заголовок или... но я могу пойти дальше, так как я глубокий нуб!
Как я могу вставить/добавить средний столбец с суммой и как рассчитать эту дополнительную сумму?






Вы можете сделать обычный поворот, а затем вычислить/добавить общую сумму:
# do a normal pivot
df = df.pivot_table(
index = "type",
columns=["fund", "source"],
values = "amount",
aggfunc = "sum",
)
# compute "sum" dataframes
dfs = []
for c in df.columns.get_level_values(0).unique():
s = df.loc[:, c].sum(axis=1, skipna=False)
dfs.append(pd.DataFrame(s, index=s.index, columns=[(c, f"Total {c}")]))
# concat them together, sort the columns:
out = pd.concat([df, pd.concat(dfs, axis=1)], axis=1)
out = out[sorted(out.columns)]
print(out)
Отпечатки:
fund fund1 fund2 fund3
source Budget Expense Total fund1 Budget Expense Total fund2 Budget Expense Total fund3
type
Fonctionnement 1118691.65 -817465.91 301225.74 186718.78 -23621.83 163096.95 15000.0 -6000.0 9000.0
Frais de Gestion NaN NaN NaN 53499.00 -53499.00 0.00 NaN NaN NaN
Mission NaN NaN NaN 1686.47 -1686.47 0.00 NaN NaN NaN
Ressource Humaine CDD NaN NaN NaN 38676.53 -36470.36 2206.17 NaN NaN NaN
@Ben Попробуйте добавить отладочные отпечатки в код :) Идея проста: добавить кадры данных «сумма» к исходному сводному кадру данных путем объединения.
Спасибо, Андрей, работает отлично. Теперь я должен понять, как работает ваш код!