Я пытаюсь рассчитать процент продаж, используя общий объем продаж для каждого мультииндекса.
Мой DataFrame выглядит так:
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
Итак, я вычисляю общие продажи для каждого уникального кортежа в индексе и сохраняю их в виде общего фрейма данных. Моя цель - рассчитать каждую рыночную долю, но сейчас я стремлюсь к TEPOS.
После поворота мой DataFrame стал примерно таким:
sum sum
vendas_kg vendas_kg
fabricante ASATP TEPOS Total
local tipo ordem
AREA I DILUIDO 1 10 20 30
2 20 30 50
CAPSULA 1 10 20 30
2 20 30 50
AREA II DILUIDO 1 10 15 25
2 20 25 45
CAPSULA 1 25 35 55
2 20 30 50
Код, который я использую для вычисления итога и создания кадра данных с мультииндексом:
#creating a sample from all data
a = df.sample(n=50)
#creating a multiindex dataframe
temp_df = pd.pivot_table(a.fillna(value=0), index=['tipo','local','pacote'],columns=['fabricante'], values=['vendas_kg'], fill_value=0, aggfunc=[np.sum])
total = temp_df.sum(level=1, axis=1)
#calculating the marketshare for Tepos
temp_df[('sum','vendas_kg','TEPOS')] = temp_df[('sum','vendas_kg','TEPOS')] / temp_df.sum(level=1, axis=1)
Происходит две вещи: если я использую все столбцы, все данные становятся NaN, если я использую приведенный выше код.
ValueError: cannot join with no level specified and no overlapping names
Моя цель - сделать что-то вроде этого:
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
Кто-нибудь может мне помочь?
Для получения дополнительной информации о данных и целях: Расчет процента в пандах сводной таблицы со столбцами