У меня есть 3 компании A, B и C и их данные о продажах за каждый квартал 2018 года, разделенные на категории компьютеров и принтеров.
df = pd.DataFrame({"Fiscal Quarter": ["FY18-Q1", "FY18-Q1", "FY18-Q1", "FY18-Q1", "FY18-Q1", "FY18-Q1",
"FY18-Q2", "FY18-Q2", "FY18-Q2", "FY18-Q2", "FY18-Q2", "FY18-Q2",
"FY18-Q3", "FY18-Q3", "FY18-Q3", "FY18-Q3", "FY18-Q3", "FY18-Q3",
"FY18-Q4", "FY18-Q4", "FY18-Q4", "FY18-Q4", "FY18-Q4", "FY18-Q4"],
"Company": ["A", "A", "B", "B", "C", "C",
"A", "A", "B", "B", "C", "C",
"A", "A", "B", "B", "C", "C",
"A", "A", "B", "B", "C", "C"],
"Category": ["Computers", "Printers", "Computers", "Printers", "Computers", "Printers",
"Computers", "Printers", "Computers", "Printers", "Computers", "Printers",
"Computers", "Printers", "Computers", "Printers", "Computers", "Printers",
"Computers", "Printers", "Computers", "Printers", "Computers", "Printers"],
"Sales": [300, 350, 1000, 700, 2500, 2800,
450, 200, 1100, 720, 2400, 2100,
600, 330, 850, 1200, 2400, 2000,
520, 400, 900, 700, 2000, 2200]})
https://github.com/currentlyunknown/sampledata/blob/master/sampledata.csv
Я хотел бывоспринимайте «значения» не только как продажи в долларах США для каждой компании, но и как сравнение в% к общему объему продаж за квартал (A + B + C), например, для компании A:
FY18-Q1 FY18-Q2
Computers 300 450
Printers 350 400
Желаемый результат будет выглядеть примерно так:
FY18-Q1 FY18-Q2
Computers 300 450
30% 40%
Printers 350 400
25% 27%
До сих пор я готовил df со столбцом ['% of Total'] для каждой компании, используя это:
total = df.groupby(['Fiscal Quarter', 'Category']).sum().rename(columns={"Sales": "Total Sales"})
df = df.merge(total, on=['Fiscal Quarter', 'Category'])
df['% of Total'] = (df['Sales'] / df['Total Sales'])
df = df.drop(['Total Sales'], axis=1)
Я создаю сводные таблицы для просмотра данных о продажах каждой компании в отдельности:
dfa = df[df['Company']=='A']
A = pd.pivot_table(
dfa,
index=['Category'],
columns=['Fiscal Quarter'],
values=['Sales', '% of Total'],
aggfunc=np.sum
).reset_index()
A.columns = A.columns.droplevel([0])
A = A.reset_index().rename_axis(None, axis=1)
Но я получаю:
FY18-Q1 FY18-Q2 FY18-Q1 FY18-Q2
Computers 300 450 30% 40%
Printers 350 400 25% 27%
Теперь, как мне это сделать?Я поворачиваю его нужным образом?