gpt4 book ai didi

python - Pandas 数据透视表 - 通过合并列的划分创建附加列

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:13 26 4
gpt4 key购买 nike

我正在尝试运行以下函数

def make_europe_view(data):

data['% Rev'] = data.GrossRevenue_GBP/data.GrossRevenue_GBP.sum()

tmean = lambda x :stats.trim_mean(x, 0.1)

pivot = pd.pivot_table(data[(data['New_category_ID'] != 0)&(data['YYYY'] == 2016)],
index = 'New_category',
values=['GrossRevenue_GBP','MOVC_GBP','PM_GBP', '% Rev'],
aggfunc= {'MOVC_GBP':tmean,'PM_GBP':tmean,'GrossRevenue_GBP':[np.sum,tmean],'% Rev':np.sum })



pivot['% PM'] = pivot['PM_GBP']/pivot[('GrossRevenue_GBP')]['<lambda>']
#pivot['% MOVC'] = pivot['MOVC_GBP']/Tmean_GR
pivot['Country'] = 'EU'
pivot['product_cat'] = pivot.index

#pivot = pivot[['product_cat', '% Rev', 'GrossRevenue_GBP', 'MOVC_GBP', 'PM_GBP', '% PM', '% MOVC', 'Country']]

return pivot

我想通过截断平均值和总和来汇总总收入,生成数据透视表没有问题,但在创建一些附加列时遇到问题。具体这部分代码:

 pivot['% PM'] = pivot['PM_GBP']/pivot[('GrossRevenue_GBP')]['<lambda>']

我正在尝试创建一个列,通过将“PM_GBP”列的截断平均值占“GrossRevenue_GBP”列的截断平均值的百分比来计算 PM 的截断平均值百分比

它会生成以下错误:

ValueError: Wrong number of items passed 25, placement implies 1

output of pivot:

非常感谢对此的帮助。

运行list()时数据透视表的列名称:

[('GrossRevenue_GBP', '<lambda>'),  ('GrossRevenue_GBP', 'sum'),  ('% Rev', 'sum'),  ('MOVC_GBP', '<lambda>'),  ('PM_GBP', '<lambda>'),  ('Country', ''),  ('product_cat', '')]

最佳答案

您可以使用元组在列中的 MultiIndex 中选择值:

tups = [('GrossRevenue_GBP', '<lambda>'),  ('GrossRevenue_GBP', 'sum'),  ('% Rev', 'sum'),  ('MOVC_GBP', '<lambda>'),  ('PM_GBP', '<lambda>'),  ('Country', ''),  ('product_cat', '')]
idx = list('ab')
cols = pd.MultiIndex.from_tuples(tups)
pivot = pd.DataFrame([[7,4,5,8,4,5,1],
[1,5,7,3,9,6,7]], columns=cols, index=idx)
print (pivot)
GrossRevenue_GBP % Rev MOVC_GBP PM_GBP Country product_cat
<lambda> sum sum <lambda> <lambda>
a 7 4 5 8 4 5 1
b 1 5 7 3 9 6 7
<小时/>
pivot['% PM'] = pivot[('PM_GBP','<lambda>')]/pivot[('GrossRevenue_GBP','<lambda>')]
print (pivot)
GrossRevenue_GBP % Rev MOVC_GBP PM_GBP Country product_cat % PM
<lambda> sum sum <lambda> <lambda>
a 7 4 5 8 4 5 1 0.571429
b 1 5 7 3 9 6 7 9.000000

为了简化生活,可以删除 MultiIndex 并创建列:

#rename columns by dict
pivot = pivot.rename(columns={'<lambda>':'tmean'})
#remove multiindex
pivot.columns = pivot.columns.map('_'.join).str.strip('_')

#simply divide
pivot['% PM'] = pivot['PM_GBP_tmean']/pivot['GrossRevenue_GBP_tmean']
print (pivot)
GrossRevenue_GBP_tmean GrossRevenue_GBP_sum % Rev_sum MOVC_GBP_tmean \
a 7 4 5 8
b 1 5 7 3

PM_GBP_tmean Country product_cat % PM
a 4 5 1 0.571429
b 9 6 7 9.000000

关于python - Pandas 数据透视表 - 通过合并列的划分创建附加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45632484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com