我有一个包含数千行和数百列的大型数据框。每行都是一个日期,在每列中我都有该日期的数据。 我将做一个较小的例子:
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.percentile
或pandas.rank
答案 0 :(得分: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