Python 数据帧中的百分位排序。熊猫

Python 数据帧中的百分位排序。熊猫,python,pandas,percentile,Python,Pandas,Percentile,我有一个包含数千行和数百列的大型数据框。每一行都是一个日期,在每一列中我都有该日期的数据。 我将举一个较小的例子: 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的中间值。 我认为必

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

 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
您可以除以每年的最大值:

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

由于某些原因,由于操作数的形状不同,我得到了一个ValueError。我有673行,75列,我想我只需要设置一个循环,从数据帧中获取每一行,并将每个条目除以这一行的最大值。max和div的轴参数是关键的。此外,这仅适用于数字列。我认为max会放弃其他人,因此会出现错误。您可以在执行max/div之前执行此操作。