首页 > 解决方案 > Pandas groupby 和 short 值并在 python 中排名前 3 位?

问题描述

我有这样的数据框

          Val1     Val2 

     0     a        1.0
     1     a        1.0
     2     a        0.98
     3     a        0.78
     4     a        0.70
     5     b        0.97
     6     b        0.67
     7     b        0.75
     8     b        1.0

我想在 Val1 上进行 groupby 并按降序排列 val2 并获取每个组的最高唯一值。

像这样

      Val1    Val2

  0     a        1.0  ----------- top1 of a
  1     a        1.0  ----------- top1 of a
  2     a        0.98 ----------- top2 of a
  3     a        0.78  ------------ top3 of a
  5     b        0.97  
  7     b        0.75
  6     b        0.67

因此,您可以看到 field 中的值是否相同,它应该仅将其视为第一名。

我试过这个,

result_CI.sort_values(['Val2'],ascending=False).groupby('Val1').head(3)

但它并没有给出预期,因为我知道 head 只是从顶部取 3 个值。我也试过 nlargest 也没有给我预期的结果。

标签: python-3.xpandaspandas-groupby

解决方案


你可以做:

df[df.groupby('Val1')['Val2'].rank(method='dense',ascending=False)<=3]
#or df[df.groupby('Val1')['Val2'].apply(lambda x: x.rank(method='dense',ascending=False)<=3)]

  Val1  Val2
0    a  1.00
1    a  1.00
2    a  0.98
3    a  0.78
5    b  0.97
7    b  0.75
8    b  1.00

推荐阅读