使用两个数据框计算熊猫百分比

我正在尝试使用每个多指标的总销售额来计算销售额的百分比。我的数据框是这样的:


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


所以我计算索引中每个唯一元组的总销售额并存储为总数据框。我的目标是计算每个 ['fabricante'] 市场份额,但现在我的目标是 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,如果我使用上面的代码。


DIEA
浏览 122回答 1
1回答

弑天下

试试这个:df_percent = temp_df.apply(lambda x: round(x / x.sum() * 100, 2), axis = 1)                            sum                            vendas_kg              fabricante    ASATP   TEPOStipo    local   pacote      CAPSULA AREA I  PLASTICO    40.00   60.00        AREA II PLASTICO    22.73   77.27DILUIDO AREA I  PLASTICO    37.50   62.50        AREA II PLASTICO    42.86   57.14要添加total列,请执行以下操作:df_percent['total'] = total解释这apply相当于一个循环,轴命令告诉应用程序他将在列中滚动。代码所做的只是获取每一行的值并除以整行的总和。我实施的方式仅在您添加其他列之前有效total
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python