2015-10-01 92 views
2

我有一個很大的數據框,有幾千行和幾百列。每一行都是一個日期,每一列中都有該日期的數據。 我將做一個小例子:數據框中的百分位數。熊貓

DATE A  B  C 
2012 73,5 27,2 19 
2013 19,5 22,2 33 
2014 33  40 19,56 

我想所有列百分位數分級給定日期。 因此,每列都會有百分位值而不是其數值,其中95百分位數表示該值位於前5%。 例如,A在2012年將擁有最高的百分等級,但它只會在中間某個地方在2014年 我相信必須有像pandas.percentile一個簡單的功能,或pandas.rank

回答

2

您可以通過最大的劃分每年:

In [11]: df1 = df.set_index("DATE") 

In [12]: df1 
Out[12]: 
     A  B  C 
DATE 
2012 73.5 27.2 19.00 
2013 19.5 22.2 33.00 
2014 33.0 40.0 19.56 

In [13]: df1.max(1) 
Out[13]: 
DATE 
2012 73.5 
2013 33.0 
2014 40.0 
dtype: float64 

In [14]: df1.div(df1.max(1), axis=0) 
Out[14]: 
      A   B   C 
DATE 
2012 1.000000 0.370068 0.258503 
2013 0.590909 0.672727 1.000000 
2014 0.825000 1.000000 0.489000 
+0

出於某種原因,我得到一個ValueError,由於操作數的不同形狀。我有673行和75列 – AK9309

+0

我想我只需要建立一個循環,將從數據幀中取出每一行,並將每個條目除以該行的最大值 – AK9309

+0

max和div的軸參數是至關重要的。這也只適用於類似數字的列。我認爲max會放棄其他人,因此ValueError。在執行max/div之前,您可以[select_dtypes](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.select_dtypes.html)。 –