【问题标题】:Percentile ranking in a dataframe. Pandas数据框中的百分位数排名。熊猫
【发布时间】:2015-10-02 02:34:44
【问题描述】:

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

 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

【问题讨论】:

    标签: python pandas percentile


    【解决方案1】:

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

    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 会放弃其他人,因此会出现 ValueError。你可以在做 max/div 之前select_dtypes
    猜你喜欢
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2022-01-16
    • 1970-01-01
    • 2021-12-06
    • 2017-05-13
    • 1970-01-01
    相关资源
    最近更新 更多