大家早上好
我有一个问题,我想使用百分位数和组比的条件删除行,例如。
对于列键中的每一个x, y ... 和每一组iden a, b, c ... 它将删除在第一个pencetilequantile和最后一个使用函数的元素: Min & Max 或用.quantile (.1) 和. quantile (.9) 在val1上删除。
输入。
df = pd.DataFrame([
['x', 'a', 9.5, 10.5], ['x', 'b', 6.8, 7], ['y','a', 7.2, 8],
['x', 'a', 11.5, 11.5], ['y', 'c', 1.5, 1.5], ['y', 'c', 8.7, 8.7],
['x', 'a', 15.5, 1.5], ['y', 'c', 2.5, 2.5], ['y', 'c', 9.5, 1.7]
], columns=['key', 'iden','val','val2'])
df
key iden val val2
0 x a 9.5 10.5
1 x b 6.8 7.0
2 y a 7.2 8.0
3 x a 11.5 11.5
4 y c 1.5 1.5
5 y c 8.7 8.7
6 x a 15.5 1.5
7 y c 2.5 2.5
8 y c 9.5 1.7
我需要得到这个结果。
key iden val val2
0 x b 6.8 7.0
1 y a 7.2 8.0
2 y c 8.7 8.7
3 x a 11.5 11.5
4 y c 2.5 2.5
使用。
g = df.groupby(['key', 'iden'])['val']
m = df['val'].between(g.transform('quantile', 0.1), g.transform('quantile', 0.9))
df = df[m]
或者使用:
m = (
df.groupby(['key', 'iden'])['val']
.transform(lambda s: s.between(s.quantile(0.1), s.quantile(0.9)))
)
df = df[m]
print(df)
key iden val val2
1 x b 6.8 7.0
2 y a 7.2 8.0
3 x a 11.5 11.5
5 y c 8.7 8.7
7 y c 2.5 2.5