首页 > 解决方案 > 带有多索引数据框的 Pandas pct_change

问题描述

我想计算多指数 pandas df 的百分比变化。

df = pd.DataFrame(
    index = pd.MultiIndex.from_product([['2020-05-01', '2020-06-01'], 
                                        ['Device 1'], 
                                        ['Sub Device 1', 'Sub Device 2', 'Sub Device 3'],
                                        ['New User', 'Returning User']],
                                       names=['Month', 'Device', 'Sub Device', 'New User Ind']),
    data={'Users':[1011598, 1654645,   40917,  190305,   31284,   
                    61318, 1040834, 1577128,   29896,  156499,   
                    29133,   59622]})

我正在寻找四个索引级别的每个组合的 pct_change。这就是我现在所拥有的:

df.groupby(level=[0,1,2,3]).pct_change()

但我得到的只是用户列中的空值。

在此处输入图像描述

我还需要在apply后面加上一个groupby吗?

决赛桌应该是这样的

                                                 Users
Month      Device   Sub Device   New User Ind         
2020-05-01 Device 1 Sub Device 1 New User          NaN
                                 Returning User    NaN
                    Sub Device 2 New User          NaN
                                 Returning User    NaN
                    Sub Device 3 New User          NaN
                                 Returning User    NaN
2020-06-01 Device 1 Sub Device 1 New User         0.02
                                 Returning User  -0.04
                    Sub Device 2 New User        -0.20
                                 Returning User  -0.17
                    Sub Device 3 New User        -0.06
                                 Returning User  -0.02

标签: pythonpandasdataframepandas-groupbymulti-index

解决方案


使用 groupby,你很接近,只是不需要包含索引的 0 级:

df.groupby(level=[1,2,3]).pct_change()

输出:

                                                    Users
Month      Device   Sub Device   New User Ind            
2020-05-01 Device 1 Sub Device 1 New User             NaN
                                 Returning User       NaN
                    Sub Device 2 New User             NaN
                                 Returning User       NaN
                    Sub Device 3 New User             NaN
                                 Returning User       NaN
2020-06-01 Device 1 Sub Device 1 New User        0.028901
                                 Returning User -0.046848
                    Sub Device 2 New User       -0.269350
                                 Returning User -0.177641
                    Sub Device 3 New User       -0.068757
                                 Returning User -0.027659

推荐阅读