根据另一列中的日期过滤一列中的值
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
大家好,我有一个包含日期和值列的 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