Pandas 使用四分位数删除两列分组的行
Pandas delete rows with Groupby two columns using quartile
大家早上好,
我有问题,我想删除使用百分位数和分组依据条件的行,例如:
对于列键中的每个 x, y .. 以及每组 iden a, b, c .. 它将删除第一个 pencetile/quantile 和最后一个使用的元素功能:Min & Max 或与 .quantile (.1) 和。 val1
上的分位数 (.9)
输入:
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
大家早上好,
我有问题,我想删除使用百分位数和分组依据条件的行,例如:
对于列键中的每个 x, y .. 以及每组 iden a, b, c .. 它将删除第一个 pencetile/quantile 和最后一个使用的元素功能:Min & Max 或与 .quantile (.1) 和。 val1
上的分位数 (.9)输入:
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