Я хотел бы отфильтровать свой набор данных, выбрав строки, которые находятся между двумя значениями (двоим образом определенными как квантили) на каждую группу. Конкретно, у меня есть набор данных, например
import pandas as pd
df = pd.DataFrame({'day': ['one', 'one', 'one', 'one', 'one', 'one', 'two', 'two', 'two', 'two', 'two'],
'weather': ['rain', 'rain', 'rain', 'sun', 'sun', 'sun', 'sun', 'rain', 'rain', 'sun', 'rain'],
'value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]})
Я хотел бы выбрать строки, в которых значения находятся между квантилями 0,1 и 0,9 за каждый день и за каждого пользователя. Я могу вычислить квантили через
df.groupby(['day', 'weather']).quantile([0.1, .9])
Но потом я чувствую себя застрявшим. Объединение полученного набора данных с исходным - пустая трата времени (исходный набор данных может быть довольно большим), и мне интересно, есть ли что-то вроде
df..groupby(['day', 'weather']).select('value', between=[0.1, 0.9])
value
с помощью quantile
g = df.groupby(['day', 'weather'])['value']
df[df['value'].between(g.transform('quantile', 0.1), g.transform('quantile', 0.9))]
day weather value
1 one rain 2
4 one sun 5
8 two rain 9