数据框中的百分位排名。 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.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
我有一个包含数千行和数百列的大型数据框。每行都是一个日期,在每一列中我都有该日期的数据。 我会做一个更小的例子:
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
您可以除以每年的最大值:
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