我有一个熊猫数据框,如下所示:
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]
我要:
因此,我发现每个组的第40个百分位数使用:
df.groupby('Name').quantile(0.4)
目标是:
我的主要问题是每个组的值都没有标准化,因此我无法对整个数据集应用总体百分位值。
但是我看到的关于过滤具有特定值的数据帧的所有帮助并没有针对每个组单独进行。我已经看到以下问题:
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
在熊猫市中有办法吗?
答案 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)
将代码用于百分位数,将loc
,ge
用于>=
(对于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