微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决根据另一列中的日期过滤列中的值

大家好,我有一个包含日期和值列的熊猫数据框。 我想要做的是根据下表的不同日期将值保持在 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.quantileDataFrame.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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。