python - 排除不同类别百分位以上的所有数据
问题描述
我有一个具有不同类别的数据框,并希望排除每个类别高于给定百分位的所有值。
d = {'cat': ['A', 'B', 'A', 'A', 'C', 'C', 'B', 'A', 'B', 'C'],
'val': [1, 2, 4, 2, 1, 0, 9, 8, 7, 7]}
df = pd.DataFrame(data=d)
cat val
0 A 1
1 B 2
2 A 4
3 A 2
4 C 1
5 C 0
6 B 9
7 A 8
8 B 7
9 C 7
因此,例如,排除 0.95 百分位数应导致:
cat val
0 A 1
1 B 2
2 A 4
3 A 2
4 C 1
5 C 0
8 B 7
因为我们有:
>>> df[df['cat']=='A'].quantile(0.95).item()
7.399999999999999
>>> df[df['cat']=='B'].quantile(0.95).item()
8.8
>>> df[df['cat']=='C'].quantile(0.95).item()
6.399999999999999
实际上有很多类别,我需要一种简洁的方法来做到这一点。
解决方案
您可以quantile
结合使用该功能groupby
:
df.groupby('cat')['val'].apply(lambda x: x[x < x.quantile(0.95)]).reset_index().drop(columns='level_1')
推荐阅读
- r - 与其他方法相比,使用 Caret 包的 KNN 给出了不好的结果
- javascript - .bind this 在类方法中
- java - Java JFrame 意外地奇怪地删除组件
- r - 在 Google Colab 中,您如何在 Google Drive 中找到文件的路径。我正在使用 R
- java - 使用 Ridesharing 应用程序请求 RDMS Firebase 分片的高级建议
- javascript - 在Javascript中生成由函数映射返回的两个或多个项目
- c - 计算每个字母在字符串中出现的次数
- python - 在 Pyspark 中解析包含 XML 字符串的列
- c# - 命名空间“系统”中不存在“语音”
- php - 如何使用php获取超过2GB的大文件的哈希值