在Multiiindex DataFrame上执行计算作为新列

发布于 2025-01-26 12:09:01 字数 1715 浏览 1 评论 0原文

我有以下MultiIndex DataFrame:

                                            MSISDN_COUNT
NAME            DIM1    SEGMENT 
JAN22           N       Detractor           307
                        Passive             198
                        Promoter            1256
                Y       Detractor           237
                        Passive             161
                        Promoter            1096
FEB22           N       Detractor           313
                        Passive             222
                        Promoter            1260
                Y       Detractor           261
                        Passive             169
                        Promoter            1155

我想创建一个新的列,该列将为每个name以及每个dim1进行计算。

计算是: ((启动子 - 碎屑) /(启动子 +被动 +碎屑器))* 100 < / code>,

所以预期的输出是

                                            MSISDN_COUNT    OUT
NAME            DIM1    SEGMENT 
JAN22           N       Detractor           307             53.88
                        Passive             198
                        Promoter            1256
                Y       Detractor           237             57.49
                        Passive             161
                        Promoter            1096
FEB22           N       Detractor           313             52.76
                        Passive             222
                        Promoter            1260
                Y       Detractor           261             56.4
                        Passive             169
                        Promoter            1155

我无法弄清楚如何使用多级索引数据框架来执行此操作。

任何帮助都将受到赞赏!

I have the following multiindex dataframe:

                                            MSISDN_COUNT
NAME            DIM1    SEGMENT 
JAN22           N       Detractor           307
                        Passive             198
                        Promoter            1256
                Y       Detractor           237
                        Passive             161
                        Promoter            1096
FEB22           N       Detractor           313
                        Passive             222
                        Promoter            1260
                Y       Detractor           261
                        Passive             169
                        Promoter            1155

I want to create a new column, which will be calculated for each NAME and for each DIM1.

The calculation is:
((Promoter - Detractor) / (Promoter + Passive + Detractor) )* 100

So the expected output is

                                            MSISDN_COUNT    OUT
NAME            DIM1    SEGMENT 
JAN22           N       Detractor           307             53.88
                        Passive             198
                        Promoter            1256
                Y       Detractor           237             57.49
                        Passive             161
                        Promoter            1096
FEB22           N       Detractor           313             52.76
                        Passive             222
                        Promoter            1260
                Y       Detractor           261             56.4
                        Passive             169
                        Promoter            1155

I can't figure out how to do this with the multi-level index dataframe.

Any help is appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

莫相离 2025-02-02 12:09:01

使用 对于3级的选择数据框,应用您的公式,将第三级sement带有value decractor并分配回:

Promoter = df.xs('Promoter', level=2)
Detractor = df.xs('Detractor', level=2)
Passive = df.xs('Passive', level=2)

s = ((Promoter - Detractor) / (Promoter + Passive + Detractor) )* 100

df['OUT'] = s.assign(SEGMENT='Detractor').set_index('SEGMENT', append=True)
print (df)
                      MSISDN_COUNT        OUT
NAME  DIM1 SEGMENT                           
JAN22 N    Detractor           307  53.889835
           Passive             198        NaN
           Promoter           1256        NaN
      Y    Detractor           237  57.496653
           Passive             161        NaN
           Promoter           1096        NaN
FEB22 N    Detractor           313  52.757660
           Passive             222        NaN
           Promoter           1260        NaN
      Y    Detractor           261  56.403785
           Passive             169        NaN
           Promoter           1155        NaN

详细信息

print (s)
            MSISDN_COUNT
NAME  DIM1              
JAN22 N        53.889835
      Y        57.496653
FEB22 N        52.757660
      Y        56.403785
      
print (s.assign(SEGMENT='Detractor').set_index('SEGMENT', append=True))
                      MSISDN_COUNT
NAME  DIM1 SEGMENT                
JAN22 N    Detractor     53.889835
      Y    Detractor     57.496653
FEB22 N    Detractor     52.757660
      Y    Detractor     56.403785

Use DataFrame.xs for select DataFrames for 3 level, apply your formula, add third level SEGMENT with value Detractor and assign back:

Promoter = df.xs('Promoter', level=2)
Detractor = df.xs('Detractor', level=2)
Passive = df.xs('Passive', level=2)

s = ((Promoter - Detractor) / (Promoter + Passive + Detractor) )* 100

df['OUT'] = s.assign(SEGMENT='Detractor').set_index('SEGMENT', append=True)
print (df)
                      MSISDN_COUNT        OUT
NAME  DIM1 SEGMENT                           
JAN22 N    Detractor           307  53.889835
           Passive             198        NaN
           Promoter           1256        NaN
      Y    Detractor           237  57.496653
           Passive             161        NaN
           Promoter           1096        NaN
FEB22 N    Detractor           313  52.757660
           Passive             222        NaN
           Promoter           1260        NaN
      Y    Detractor           261  56.403785
           Passive             169        NaN
           Promoter           1155        NaN

Details:

print (s)
            MSISDN_COUNT
NAME  DIM1              
JAN22 N        53.889835
      Y        57.496653
FEB22 N        52.757660
      Y        56.403785
      
print (s.assign(SEGMENT='Detractor').set_index('SEGMENT', append=True))
                      MSISDN_COUNT
NAME  DIM1 SEGMENT                
JAN22 N    Detractor     53.889835
      Y    Detractor     57.496653
FEB22 N    Detractor     52.757660
      Y    Detractor     56.403785
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文