Pandas 在两个分位数之间的组中选择值
Pandas pick values in group between two quantiles
我想通过选择两个值之间的行(dimucally 定义为分位数)每组 来过滤我的数据集。具体来说,我有一个像
这样的数据集
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]})
我想 select 每天和每个天气的值在 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
我想通过选择两个值之间的行(dimucally 定义为分位数)每组 来过滤我的数据集。具体来说,我有一个像
这样的数据集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]})
我想 select 每天和每个天气的值在 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