Python 使用两个数据帧进行百分比计算
我试图用每个多重指数的总销售额来计算销售额的百分比。 我的数据帧如下所示:Python 使用两个数据帧进行百分比计算,python,pandas,statistics,Python,Pandas,Statistics,我试图用每个多重指数的总销售额来计算销售额的百分比。 我的数据帧如下所示: local categoria fabricante tipo consistencia peso pacote ordem vendas_kg AREA I SABAO ASATP DILUIDO LIQUIDO 1501 A 2000g PLASTICO 1 10 AREA I SABAO TEPOS
local categoria fabricante tipo consistencia peso pacote ordem vendas_kg
AREA I SABAO ASATP DILUIDO LIQUIDO 1501 A 2000g PLASTICO 1 10
AREA I SABAO TEPOS DILUIDO LIQUIDO 1501 A 2000g PLASTICO 1 20
AREA I SABAO ASATP CAPSULA LIQUIDO 1501 A 2000g PLASTICO 1 20
AREA I SABAO TEPOS CAPSULA LIQUIDO 1501 A 2000g PLASTICO 1 30
AREA I SABAO ASATP DILUIDO LIQUIDO 1501 A 2000g PLASTICO 2 20
AREA I SABAO TEPOS DILUIDO LIQUIDO 1501 A 2000g PLASTICO 2 30
AREA I SABAO ASATP CAPSULA LIQUIDO 1501 A 2000g PLASTICO 2 20
AREA I SABAO TEPOS CAPSULA LIQUIDO 1501 A 2000g PLASTICO 2 30
AREA II SABAO ASATP DILUIDO LIQUIDO 1501 A 2000g PLASTICO 1 10
AREA II SABAO TEPOS DILUIDO LIQUIDO 1501 A 2000g PLASTICO 1 15
AREA II SABAO ASATP CAPSULA LIQUIDO 1501 A 2000g PLASTICO 1 25
AREA II SABAO TEPOS CAPSULA LIQUIDO 1501 A 2000g PLASTICO 1 35
AREA II SABAO ASATP DILUIDO LIQUIDO 1501 A 2000g PLASTICO 2 20
AREA II SABAO TEPOS DILUIDO LIQUIDO 1501 A 2000g PLASTICO 2 25
AREA II SABAO TEPOS CAPSULA LIQUIDO 1501 A 2000g PLASTICO 2 20
AREA II SABAO TEPOS CAPSULA LIQUIDO 1501 A 2000g PLASTICO 2 30
sum sum
vendas_kg vendas_kg
fabricante ASATP TEPOS % segment Total
local tipo ordem
AREA I DILUIDO 1 33% 66% 50% 30
2 40% 60% 50% 50
CAPSULA 1 33% 66% 50% 30
2 40% 60% 50% 50
AREA II DILUIDO 1 40% 60% 31.25% 25
2 44.44% 55.56% 47.37% 45
CAPSULA 1 43.64% 57.36% 53.63% 55
2 40% 60% 53.63% 50
所以我计算索引中每个唯一元组的总销售额,并将其存储为总数据帧。我的目标是计算每个['fabricante']的市场份额,但目前我的目标是TEPO`
旋转数据帧后,数据帧会变成这样:
local categoria fabricante tipo consistencia peso pacote ordem vendas_kg
AREA I SABAO ASATP DILUIDO LIQUIDO 1501 A 2000g PLASTICO 1 10
AREA I SABAO TEPOS DILUIDO LIQUIDO 1501 A 2000g PLASTICO 1 20
AREA I SABAO ASATP CAPSULA LIQUIDO 1501 A 2000g PLASTICO 1 20
AREA I SABAO TEPOS CAPSULA LIQUIDO 1501 A 2000g PLASTICO 1 30
AREA I SABAO ASATP DILUIDO LIQUIDO 1501 A 2000g PLASTICO 2 20
AREA I SABAO TEPOS DILUIDO LIQUIDO 1501 A 2000g PLASTICO 2 30
AREA I SABAO ASATP CAPSULA LIQUIDO 1501 A 2000g PLASTICO 2 20
AREA I SABAO TEPOS CAPSULA LIQUIDO 1501 A 2000g PLASTICO 2 30
AREA II SABAO ASATP DILUIDO LIQUIDO 1501 A 2000g PLASTICO 1 10
AREA II SABAO TEPOS DILUIDO LIQUIDO 1501 A 2000g PLASTICO 1 15
AREA II SABAO ASATP CAPSULA LIQUIDO 1501 A 2000g PLASTICO 1 25
AREA II SABAO TEPOS CAPSULA LIQUIDO 1501 A 2000g PLASTICO 1 35
AREA II SABAO ASATP DILUIDO LIQUIDO 1501 A 2000g PLASTICO 2 20
AREA II SABAO TEPOS DILUIDO LIQUIDO 1501 A 2000g PLASTICO 2 25
AREA II SABAO TEPOS CAPSULA LIQUIDO 1501 A 2000g PLASTICO 2 20
AREA II SABAO TEPOS CAPSULA LIQUIDO 1501 A 2000g PLASTICO 2 30
sum sum
vendas_kg vendas_kg
fabricante ASATP TEPOS % segment Total
local tipo ordem
AREA I DILUIDO 1 33% 66% 50% 30
2 40% 60% 50% 50
CAPSULA 1 33% 66% 50% 30
2 40% 60% 50% 50
AREA II DILUIDO 1 40% 60% 31.25% 25
2 44.44% 55.56% 47.37% 45
CAPSULA 1 43.64% 57.36% 53.63% 55
2 40% 60% 53.63% 50
求和
文达斯•千克文达斯•千克
制造厂ASATP TEPOS总计
当地提波奥德姆
第一区DILUIDO 1 10 20 30
2 20 30 50
荚膜1 10 20 30
2 20 30 50
第二区DILUIDO 1 10 15 25
2 20 25 45
荚膜1253555
2 20 30 50
我用来计算total和使用multiindex创建dataframe的代码是:
#从所有数据创建样本
a=df.样品(n=50)
#创建多索引数据帧
temp_df=pd.pivot_表(a.fillna(值=0),索引=['tipo','local','pacote'],列=['fabricante'],值=['vendas_kg'],填充值=0,aggfunc=[np.sum])
总计=温度偏差总和(标高=1,轴线=1)
#计算TEPO的市场份额
温度分布系数[(“总和”、“卖方重量”、“TEPOS”)]=温度分布系数[(“总和”、“卖方重量”、“TEPOS”)]/温度分布系数总和(标高=1,轴线=1)
有两件事发生了,如果我使用所有列,所有数据都变成NaN,如果我使用上面的代码
ValueError:无法在未指定级别和名称重叠的情况下加入
我的目标是有这样的东西:
local categoria fabricante tipo consistencia peso pacote ordem vendas_kg
AREA I SABAO ASATP DILUIDO LIQUIDO 1501 A 2000g PLASTICO 1 10
AREA I SABAO TEPOS DILUIDO LIQUIDO 1501 A 2000g PLASTICO 1 20
AREA I SABAO ASATP CAPSULA LIQUIDO 1501 A 2000g PLASTICO 1 20
AREA I SABAO TEPOS CAPSULA LIQUIDO 1501 A 2000g PLASTICO 1 30
AREA I SABAO ASATP DILUIDO LIQUIDO 1501 A 2000g PLASTICO 2 20
AREA I SABAO TEPOS DILUIDO LIQUIDO 1501 A 2000g PLASTICO 2 30
AREA I SABAO ASATP CAPSULA LIQUIDO 1501 A 2000g PLASTICO 2 20
AREA I SABAO TEPOS CAPSULA LIQUIDO 1501 A 2000g PLASTICO 2 30
AREA II SABAO ASATP DILUIDO LIQUIDO 1501 A 2000g PLASTICO 1 10
AREA II SABAO TEPOS DILUIDO LIQUIDO 1501 A 2000g PLASTICO 1 15
AREA II SABAO ASATP CAPSULA LIQUIDO 1501 A 2000g PLASTICO 1 25
AREA II SABAO TEPOS CAPSULA LIQUIDO 1501 A 2000g PLASTICO 1 35
AREA II SABAO ASATP DILUIDO LIQUIDO 1501 A 2000g PLASTICO 2 20
AREA II SABAO TEPOS DILUIDO LIQUIDO 1501 A 2000g PLASTICO 2 25
AREA II SABAO TEPOS CAPSULA LIQUIDO 1501 A 2000g PLASTICO 2 20
AREA II SABAO TEPOS CAPSULA LIQUIDO 1501 A 2000g PLASTICO 2 30
sum sum
vendas_kg vendas_kg
fabricante ASATP TEPOS % segment Total
local tipo ordem
AREA I DILUIDO 1 33% 66% 50% 30
2 40% 60% 50% 50
CAPSULA 1 33% 66% 50% 30
2 40% 60% 50% 50
AREA II DILUIDO 1 40% 60% 31.25% 25
2 44.44% 55.56% 47.37% 45
CAPSULA 1 43.64% 57.36% 53.63% 55
2 40% 60% 53.63% 50
有人能帮我吗?
有关数据和目标的更多信息,请访问:尝试以下操作:
df_percent = temp_df.apply(lambda x: round(x / x.sum() * 100, 2), axis = 1)
sum
vendas_kg
fabricante ASATP TEPOS
tipo local pacote
CAPSULA AREA I PLASTICO 40.00 60.00
AREA II PLASTICO 22.73 77.27
DILUIDO AREA I PLASTICO 37.50 62.50
AREA II PLASTICO 42.86 57.14
要添加total
列,请执行以下操作:
df_percent['total'] = total
解释
apply
相当于一个循环,axis命令告诉apply他将在列中滚动。代码所做的只是取每一行的值,除以整行的和。我实现的方法只在添加其他列之前有效,如total
太棒了!成功了!你能详细说明一下我做错了什么以及这段代码是如何工作的吗?因为我需要对一些计算做进一步的了解,如果你能看看这个问题,如果你的答案帮助我,你会理解这个概念。