【发布时间】:2021-06-29 16:42:07
【问题描述】:
我对 pandas 很陌生,目前不确定是否可以使用 margin=True 对列的值求和而不是一次性总和。目前,我已使用 Microsoft Excel 的数据透视表功能作为参考构建了此表。
代码如下:
import pandas as pd
import numpy as np
data = {
'company_country': ['C1', 'C1', 'C2', 'C2', 'C3', 'C4', 'C4'],
'Company': ['Company1', 'Company2', 'Company3', 'Company4', 'Company5', 'Company6', 'Company7'],
'Sales': [10, 20, 30, 40, 50 , 60, 70],
'Gross Margin': [40, 50, 60, 70, 80, 90, 100],
'invoice_date': ['Week1', 'Week1', 'Week2', 'Week2', 'Week3', 'Week4', 'Week4'],
'Account_code': ['3P', 'Inter-company', '3P', 'Inter-company', 'Inter-company', '3P', 'Inter-company']
}
df = pd.DataFrame(data,
columns=['company_country',
'Company',
'Sales',
'Gross Margin',
'invoice_date',
'Account_code'
]
)
data_summarised = pd.pivot_table(df, index=["company_country", "Company"],
values=["Sales", "Gross Margin"],
columns=["invoice_date", "Account_code"],
aggfunc=[np.sum],
fill_value=0,
margins=True)
data_summarised.columns = data_summarised.columns.droplevel(0)
data_summarised.columns = data_summarised.columns.swaplevel(0, 1)
data_summarised.columns = data_summarised.columns.swaplevel(1, 2)
print(data_summarised)
输出是:
invoice_date Week1 ... Week4 All
Account_code 3P Inter-company ... Inter-company
Gross Margin Gross Margin ... Sales Sales
company_country Company ...
C1 Company1 40 0 ... 0 10
Company2 0 50 ... 0 20
C2 Company3 0 0 ... 0 30
Company4 0 0 ... 0 40
C3 Company5 0 0 ... 0 50
C4 Company6 0 0 ... 0 60
Company7 0 0 ... 70 70
All 40 50 ... 70 280
[8 rows x 16 columns]
Process finished with exit code 0
问题: 是否可以在此表中添加列名称为“3P 销售额总和”、“公司间销售额总和”、“3P 毛利率总和”和“公司间毛利率总和”的列,而不仅仅是总销售额和毛利率?
提前感谢您的帮助!
【问题讨论】:
标签: pandas pivot-table