根据另一列中的日期过滤一列中的值

Filtering of values within a column based on the dates in another column

大家好,我有一个包含日期和值列的 pandas 数据框。 我想要做的是根据下面 table 的不同日期将值保持在 25% 和 75% 的分位数内。有办法吗?

Date Values
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 with lambda functions and pass to Series.between for filter in 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 with 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