2017-06-22 134 views
1

在下面的表格中。 dataframe:將熊貓數據框聚合爲多列的百分位數

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%   

例如,第一行包含ps_variable_1處於前33%或前三分之一的情況的數量,以及ps_variable_2分別處於前三分之一,中三分之一和下三分之一的情況的相應數量。

回答

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 
+0

謝謝@艾倫!你的輸出數據框可以重新組織成我的問題中指定的格式嗎? – user308827

+0

在你的例子中,你說你需要2列,但在預期的輸出中,你顯示了3列。我有點不確定你需要什麼。 – Allen

+0

對不起,我會更新問題。我需要輸出3列 – user308827

相關問題