Pandas groupby,其中列值大于组的x百分位数

时间:2018-09-19 20:26:10

标签: python pandas dataframe

我有一个熊猫数据框,如下所示:

df = pd.DataFrame()
df['Name'] = ['Abby', 'Abby', 'Abby', 'Abby', 'Abby', 'Daniel', 'Daniel', 'Daniel', 'Daniel', 'Daniel']
df['Marks'] = [100, 90, 76, 50, 10, 50, 45, 38, 25, 5]

我要:

  1. 找到每个组的第40个百分点
  2. 过滤数据框,以显示该组第40个百分点以上的所有值。

因此,我发现每个组的第40个百分位数使用:

df.groupby('Name').quantile(0.4)

目标是:

enter image description here

我的主要问题是每个组的值都没有标准化,因此我无法对整个数据集应用总体百分位值。

但是我看到的关于过滤具有特定值的数据帧的所有帮助并没有针对每个组单独进行。我已经看到以下问题:

Pandas, groupby where column value is greater than x

Pandas Groupby apply function to count values greater than zero

我的问题基本上基于以下问题的变体: Calculate Arbitrary Percentile on Pandas GroupBy

在熊猫市中有办法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用transform

df[df.Marks>df.groupby('Name').Marks.transform('quantile',0.4)]
Out[712]: 
     Name  Marks
0    Abby    100
1    Abby     90
2    Abby     76
5  Daniel     50
6  Daniel     45
7  Daniel     38

答案 1 :(得分:1)

将代码用于百分位数,将locge用于>=(对于gt使用>)和索引匹配:

df = df.set_index('Name')
df.loc[df.Marks.ge(df.groupby('Name').quantile(0.4).Marks)]

    Name    Marks
0   Abby    100
1   Abby    90
2   Abby    76
5   Daniel  50
6   Daniel  45
7   Daniel  38
相关问题