代码之家  ›  专栏  ›  技术社区  ›  Cranjis

熊猫价值百分位

  •  0
  • Cranjis  · 技术社区  · 4 年前

    d = [f1  f2  f3 
         1    2   3 
         5    1   2 
         3    3   1 
         2    4   7
         ..  ..  ..]
    

    我想为每个特征添加行中该特征值的百分位(对于特征子集)。 所以 subset = [f1,f2,f3] 我的数据帧将是

    new_d =[f1   f2   f3  f1_per   f2_per   f3_per
             1    2   3    0         0.25     0.5
             5    1   2    1          0       0.25
             3    3   1    0.5        0.5     0
             2    4   5    0.25      0.75     1
             4    5   4    0.75       1       0.75]
    

    最好的办法是什么?

    3 回复  |  直到 4 年前
        1
  •  1
  •   jezrael    4 年前

    DataFrame.rank 将所有列合并回原始列

    df = df.join(df.rank(pct=True).add_prefix('pct'))
    print (df)
      f1  f2  f3  pctf1  pctf2  pctf3
    0   1   2   3    0.2    0.4    0.6
    1   5   1   2    1.0    0.2    0.4
    2   3   3   1    0.6    0.6    0.2
    3   2   4   7    0.4    0.8    1.0
    4   4   5   4    0.8    1.0    0.8
    

    如果需要,则按行数的百分比排名 1

    df = df.join(df.rank().sub(1).div(len(df) - 1).add_prefix('pct'))
    print (df)
       f1  f2  f3  pctf1  pctf2  pctf3
    0   1   2   3   0.00   0.25   0.50
    1   5   1   2   1.00   0.00   0.25
    2   3   3   1   0.50   0.50   0.00
    3   2   4   7   0.25   0.75   1.00
    4   4   5   4   0.75   1.00   0.75
    
        2
  •  2
  •   Mayank Porwal    4 年前

    方法如下:

    df['pct_1'] = df.f1.rank(pct=True) 
    df['pct_f2'] = df.f2.rank(pct=True)
    df['pct_f3'] = df.f3.rank(pct=True) 
    

       f1  f2  f3  pct_1  pct_f2  pct_f3
    0   1   2   3   0.25    0.50    0.75
    1   5   1   2   1.00    0.25    0.50
    2   3   3   1   0.75    0.75    0.25
    3   2   4   7   0.50    1.00    1.00
    
        3
  •  0
  •   Dani Mesejo    4 年前

    res = df.apply(lambda x: np.greater.outer(x.values, x.values).sum(axis=1) / (len(x) - 1))
    res.columns = [f'{c}_per' for c in df.columns]
    res = df.join(res)
    print(res)
    

    输出

       f1  f2  f3  f1_per  f2_per  f3_per
    0   1   2   3    0.00    0.25    0.50
    1   5   1   2    1.00    0.00    0.25
    2   3   3   1    0.50    0.50    0.00
    3   2   4   7    0.25    0.75    1.00
    4   4   5   4    0.75    1.00    0.75
    
    推荐文章