首页 > 解决方案 > Python 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

我的目标是比较并找到在给定小时内高于阈值的所有刻度。例如,我想将2021-02-01 00:00:0000:59:59之间的所有刻度与第二个数据帧中 2021-02-01 00:00:00的阈值进行比较,依此类推,持续时间为这个月。

我尝试使用groupby()将刻度分组为(date, hour),但我不知道如何自动执行为整个月的数据查找高于相应阈值的值的过程。

任何帮助将不胜感激。

标签: pythonpandasdatepandas-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.


推荐阅读