如何:当数据透视表中存在多索引时,对列进行划分



我有一个销售数据集,我将其读入Pandas数据框架并转向组信息。现在列是一个Multiindex,看起来像这样:

MultiIndex([('Orders', 'Pants'),
('Orders', 'Shirts'),
('Orders', 'Shoes'),
( 'Spend', 'Pants'),
( 'Spend', 'Shirts'),
( 'Spend', 'Shoes'),,
names=[None, 'Product'])

现在,我正试图计算一个"平均订单值"。对于每个"产品"。我想这样做:

# Calculate Avg. Order Value by dividing Spend Series by Orders Series
dataframe['AOV'] = dataframe['Spend'] / dataframe['Orders'] 

但是我不能。我是如何得到这样一个数据框架的:

MultiIndex([('Orders', 'Pants'),
('Orders', 'Shirts'),
('Orders', 'Shoes'),
( 'Spend', 'Pants'),
( 'Spend', 'Shirts'),
( 'Spend', 'Shoes'),
( 'AOV', 'Pants'),
( 'AOV', 'Shirts'),
( 'AOV', 'Shoes'),
names=[None, 'Product'])

Spend除以Orders,然后用keys参数除concat,在原始数据框上附加额外的索引级别AOV,然后concat,得到结果

AOV = pd.concat([df.loc['Spend'] / df.loc['Orders']], keys=['AOV'])
result = pd.concat([df, AOV])

或者你可以unstack数据帧,然后分割和堆栈返回

s = df.unstack()
s.loc['AOV'] = s.loc['Spend'] / s.loc['Orders']
result = s.stack()

最新更新