我在一个pandas数据框架中有一个月的不同间隔的刻度,如下所示
Spread
Date
2021-02-01 00:01:10.718 9.0
2021-02-01 00:01:14.471 9.2
2021-02-01 00:01:24.794 5.5
2021-02-01 00:01:30.738 4.6
2021-02-01 00:01:30.938 3.5
我也有一个小时阈值如下
Upper
Date
2021-02-01 00:00:00 4.709884
2021-02-01 01:00:00 1.356615
2021-02-01 02:00:00 0.667457
2021-02-01 03:00:00 0.628824
2021-02-01 04:00:00 0.642154
我的目标是比较并找到给定小时内高于阈值的所有刻度。例如,我想比较20121-02-01 00:00:00之间的所有刻度和00:59:59的阈值2019-02-01 00:00:00从第二个数据帧开始,依此类推。
我已经尝试使用groupby()
将刻度分组到(日期,小时),但是我不知道如何自动地在整个月的数据中找到高于相应阈值的值。
任何帮助都将是非常感激的。
pd.merge_asof
是你的朋友:
s = pd.merge_asof(df, hourly, on='Date')
# for references
df['Upper'] = s['Upper'].values
# we need to pass value because `merge_asof` reset the index
df['matched'] = (s['Spread'] <= s['Upper']).values
输出:
Spread Upper matched
Date
2021-02-01 00:01:10.718 9.0 4.709884 False
2021-02-01 00:01:14.471 9.2 4.709884 False
2021-02-01 00:01:24.794 5.5 4.709884 False
2021-02-01 00:01:30.738 4.6 4.709884 True
2021-02-01 00:01:30.938 3.5 4.709884 True
注意:如果您有不同的刻度,您可以将by='tick'
传递给merge_asof
。