问题描述
大家好,我有一个包含日期和值列的熊猫数据框。 我想要做的是根据下表的不同日期将值保持在 25% 和 75% 分位数内。有没有办法做到这一点?
日期 | 价值观 |
---|---|
2020-1-23 | 455.0 |
2020-1-25 | 428.0 |
2020-1-25 | 379.0 |
2020-1-25 | 386.0 |
2020-1-26 | 385.0 |
2020-1-26 | 476.0 |
2020-1-26 | 427.0 |
2020-1-26 | 399.0 |
2020-1-26 | 374.0 |
2020-1-26 | 419.0 |
解决方法
将 GroupBy.transform
与 lambda 函数一起使用并传递给 Series.between
以在 boolean indexing
中进行过滤:
g = df.groupby('Date')['Values']
s1 = g.transform(lambda x: x.quantile(0.25))
s2 = g.transform(lambda x: x.quantile(0.75))
df = df[df['Values'].between(s1,s2)]
print (df)
Date Values
0 2020-1-23 455.0
3 2020-1-25 386.0
7 2020-1-26 399.0
9 2020-1-26 419.0
或者将 DataFrameGroupBy.quantile
与 DataFrame.join
一起使用:
df1 = df.join(df.groupby('Date')['Values'].quantile([0.25,0.75]).unstack(),on='Date')
df = df[df['Values'].between(df1[0.25],df1[0.75])]
print (df)
Date Values
0 2020-1-23 455.0
3 2020-1-25 386.0
7 2020-1-26 399.0
9 2020-1-26 419.0