Я создаю сводную таблицу с помощью Pandas, но на некоторое время застрял в промежуточных итогах для строк в разных столбцах (с одинаковыми значениями). Я провел некоторое исследование стекового потока, такого как Промежуточные суммы строк в сводных таблицах Pandas. и это Промежуточные итоги для индекса сводной таблицы Pandas и столбца (на самом деле этот пример близок, но кое-что также отличается от моего случая), но не нашел правильной подсказки для моего случая, поэтому, пожалуйста, для этоготема, спасибо.
Здесь я приведу упрощенный DataFrame (оригинальный размер слишком велик, чтобы показывать здесь, поэтому их значения действительно не имеют значения, формат - это то, что я ищу) моего случая и кодаЯ написал для получения моей сводной таблицы.
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
'Co':['NN']*6,
'Op':['A','B']*3,
'Stk':[1.1,1.2,1.3]*2,
'Tm':['07-01-2018','08-01-2018','09-01-2018']*2,
'Qt':[100,200,300]*2
}
)
df
Вывод df выглядит следующим образом:
Co Op Qt Stk Tm
0 NN A 100 1.1 07-01-2018
1 NN B 200 1.2 08-01-2018
2 NN A 300 1.3 09-01-2018
3 NN B 100 1.1 07-01-2018
4 NN A 200 1.2 08-01-2018
5 NN B 300 1.3 09-01-2018
Затем я преобразую выше df в свою сводную таблицу:
df['Qt'] = df['Qt'].apply(pd.to_numeric)
df['Stk']=df['Stk'].apply(pd.to_numeric)
df['Co'] = df['Co'].astype(str)
tb=pd.pivot_table(df,index=["Tm"],columns=["Co","Op","Stk"],aggfunc=np.sum,values=['Qt'], fill_value=0, margins=True, margins_name='All')
tb
Сгенерированная сводная таблица выглядит следующим образом:
Qt
Co NN All
Op A B
Stk 1.1 1.2 1.3 1.1 1.2 1.3
Tm
07-01-2018 100 0 0 100 0 0 200
08-01-2018 0 200 0 0 200 0 400
09-01-2018 0 0 300 0 0 300 600
All 100 200 300 100 200 300 1200
Формат, который я действительно ожидаю, таков:
Qt
Co NN All
Op A ATotal B BTotal
Stk 1.1 1.2 1.3 1.1 1.2 1.3
Tm
07-01-2018 100 0 0 100 100 0 0 100 200
08-01-2018 0 200 0 200 0 200 0 200 400
09-01-2018 0 0 300 300 0 0 300 300 600
All 100 200 300 600 100 200 300 600 1200
Я пытался создать этот точно такой же формат некоторое время и до сих пор могу'не получить тот же (я пробовал что-то вроде создания двух отдельных сводных таблиц A и B и объединения их вместе, но это будет мешать со всеми полями).Так что помощь здесь действительно нужна.ps Я все еще новичок в сообществе stackoverflow, поэтому извините, если в моем вопросе отсутствуют некоторые аспекты, спасибо.