我正在嘗試使用每個多指標的總銷售額來計算銷售額的百分比。我的數據框是這樣的:local categoria fabricante tipo consistencia peso pacote ordem vendas_kgAREA I SABAO ASATP DILUIDO LIQUIDO 1501 A 2000g PLASTICO 1 10AREA I SABAO TEPOS DILUIDO LIQUIDO 1501 A 2000g PLASTICO 1 20AREA I SABAO ASATP CAPSULA LIQUIDO 1501 A 2000g PLASTICO 1 20AREA I SABAO TEPOS CAPSULA LIQUIDO 1501 A 2000g PLASTICO 1 30所以我計算索引中每個唯一元組的總銷售額并存儲為總數據框。我的目標是計算每個 ['fabricante'] 市場份額,但現在我的目標是 TEPOS。` 在旋轉我的 DataFrame 后變成這樣: sum sum vendas_kg vendas_kgfabricante ASATP TEPOS Totallocal tipo ordem AREA I DILUIDO 1 10 20 30 2 20 30 50 CAPSULA 1 10 20 30 2 20 30 50AREA II DILUIDO 1 10 15 25 2 20 25 45 CAPSULA 1 25 35 55 2 20 30 50我用來計算總數并使用多索引創建數據框的代碼是:#creating a sample from all dataa = df.sample(n=50)#creating a multiindex dataframetemp_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 Tepostemp_df[('sum','vendas_kg','TEPOS')] = temp_df[('sum','vendas_kg','TEPOS')] / temp_df.sum(level=1, axis=1)有兩件事正在發生,如果我使用所有列,所有數據都變為 NaN,如果我使用上面的代碼。
1 回答

弒天下
TA貢獻1818條經驗 獲得超8個贊
試試這個:
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相當于一個循環,軸命令告訴應用程序他將在列中滾動。代碼所做的只是獲取每一行的值并除以整行的總和。我實施的方式僅在您添加其他列之前有效total
添加回答
舉報
0/150
提交
取消