如何确定日期时间列中的值是否在来自另一个数据帧的任何一对日期时间之间

我花了几个小时在谷歌上搜索来解决这个问题,但我没有找到关于这些参数的任何信息。我想查找与特定日期时间关联的值是否出现在不同大小的另一个数据框中的至少一个日期时间范围之间。以下是示例数据框:

import pandas as pd

df1 = pd.DataFrame({'Datetime': ['2020-01-01 01:01:01', '2020-01-01 10:10:10', '2020-01-01 12:10:01', '2020-01-02 03:16:24', '2020-12-01 04:34:21'], 'Value': [0.006, 0.002, 0.005, 0.034, 0.001]})
df2 = pd.DataFrame({'Start': ['2020-01-01 01:01:00', '2020-01-01 07:10:10', '2020-01-01 21:10:01', '2020-01-03 06:16:24', '2020-12-25 14:12:34'], 'End': ['2020-01-01 02:00:00', '2020-01-01 08:01:01', '2020-01-01 21:34:09', '2020-01-01 09:23:42', '2020-12-25 15:13:21']})

# convert columns to datetime format
df1.Datetime = pd.to_datetime(df1.Datetime)
df2[['Start', 'End']] = df2[['Start', 'End']].apply(pd.to_datetime)

df1

Datetime                Value     Check
2020-01-01 01:01:01     0.006     
2020-01-01 10:10:10     0.002
2020-01-01 12:10:01     0.005
2020-01-02 03:16:24     0.034
2020-12-01 04:34:21     0.001

df2

Start                   End    
2020-01-01 01:01:00     2020-01-01 02:00:00     
2020-01-01 07:10:10     2020-01-01 08:01:01
2020-01-01 21:10:01     2020-01-01 21:34:09
2020-01-03 06:16:24     2020-01-01 09:23:42
2020-12-25 14:12:34     2020-12-25 15:13:21

如果df1['Value']df1['Datetime']at 索引 1关联在 中的任何范围之间df2,则函数应返回Trueindf1['Check']并且False如果关联的日期时间不在任何范围之间。这应该继续检查每个索引中的df1所有范围df2

我试过使用pd.DataFrame.any,但这会引发"ValueError: Can only compare identically-labeled Series objects". 我在想嵌套for loop将是要走的路,但我不确定如何为这样的事情设置一个。

回答

使用 numpy 的数组广播:

dt = df1['Datetime'].to_numpy()
start = df2['Start'].to_numpy()[:, None]
end = df2['End'].to_numpy()[:, None]

mask = (start <= dt) & (dt <= end)
df1['Check'] = mask.any(axis=0)


以上是如何确定日期时间列中的值是否在来自另一个数据帧的任何一对日期时间之间的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>