将pandas数据帧聚合为多列的百分位数排名

时间:2017-06-22 20:19:18

标签: python pandas

在下面。数据帧:

    ps_variable_2  ps_variable_1
0       45.652174      60.000000
1       48.913043      13.333333
2       56.521739      55.555556
3       57.608696      37.777778
4       30.434783      44.444444
5       36.956522      77.777778
6       33.695652      64.444444
7       53.260870      37.777778

我希望用3列来获得一个新的数据帧:前33%中33%底33%。每列有3行,如下所示:

                Top 33%     Middle 33%   Bottom 33%
Top 33%         
Middle 33%          
Bottom 33%          

E.g。第一行包含ps_variable_1位于前33%或前三分之一的情况的数量,以及ps_variable_2分别位于前三分之一,中三分之一和下三分之一的情况的相应数量。

1 个答案:

答案 0 :(得分:1)

您可以使用排名来获取每一行的百分位数,将它们切换到顶部,中间底部区域,然后计算它们。

(
    df.apply(lambda x: pd.cut(x.rank(pct=True),
                              [0,1/3.0,2/3.0,1],
                              labels=["Bottom 33%","Middle 33%","Top 33%"]))
    .apply(lambda y: y.value_counts())
)
Out[549]: 
            ps_variable_2  ps_variable_1
Bottom 33%              2              3
Middle 33%              3              2
Top 33%                 3              3