我可以使用从列中删除95%以上的数据
df[df.value < df.value.quantile(.95)]
如何删除按另一列分组的95%以上的数据?
所以,如果我有一个像下面这样的数据帧,我想删除第1行,因为它在类型a中超过了95%。
Row type value
1 A 100000
2 A 0.1
3 A 0.3
4 B 10
5 B 11
编辑:我想删除所有"类型"的95%以上数据-删除A类、B类等的95%以上
您尝试过吗:
df[df['value'].lt(df.groupby('type')['value'].transform(lambda s: s.quantile(.95)))]
或者,缩写形式:
df[df['value'].lt(df.groupby('type')['value'].transform('quantile', .95))]
输出:
Row type value
1 2 A 0.1
2 3 A 0.3
3 4 B 10.0
一个简单的解决方案,.groupby
和.apply
用于过滤每组中的行:
df.groupby('type', group_keys=False).apply(
lambda g: g[g.value < g.value.quantile(.95)]
)
Row type value
1 2 A 0.1
2 3 A 0.3
3 4 B 10.0
以前的解决方案-如果您想仅删除类型A中95%以上的数据:
vals_a = df.loc[df.type.eq('A'), 'value']
df[df.value.lt(vals_a.quantile(.95)) & df.type.eq('A') | df.type.ne('A')]
结果:
Row type value
1 2 A 0.1
2 3 A 0.3
3 4 B 10.0
4 5 B 11.0