数据框中的百分位排名。 Pandas

Percentile ranking in a dataframe. Pandas

我有一个包含数千行和数百列的大型数据框。每行都是一个日期,在每一列中我都有该日期的数据。 我会做一个更小的例子:

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

我想获得给定日期所有列的百分位数排名。 所以每一列都会有百分位值而不是它的数字,其中 95 个百分位意味着该值位于前 5%。 例如,2012 年的 A 将具有最高的百分位数评级,但在 2014 年只会处于中间位置 我认为必须有一个简单的函数,例如 pandas.percentilepandas.rank

您可以除以每年的最大值:

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