python - 评估 df 的每一行中的日期时间函数是否落在另一个 df 的日期时间范围内

标签 python pandas datetime for-loop series

我是 python 的新手,需要一些帮助来解决我遇到的有关日期时间函数的问题。

我有 df_a,其中有一列标题为 time,我正尝试在此 df_a 中创建一个新列 id

我希望 id 列由时间是否包含在 df_b 列的“date”和“date_new”之间的时间范围内来确定,例如,第一行的日期为“2019-01-07 20:52:41”,“date_new”为“2019-01-07 21:07:41”(15 分钟的时间间隔),我想要该行的索引,当时间为“2019-01-07 20:56:30”(即 id=0)时,在 df_a 中显示为我的 id,依此类推所有行在 df_a 中,

这个问题很相似,但是随着我不断得到,无法弄清楚如何让它与我一起工作

python assign value to pandas df if falls between range of dates in another df

s = pd.Series(df_b['id'].values,pd.IntervalIndex.from_arrays(df_b['date'],df_b['date_new'])) 
df_a['id']=df_a['time'].map(s)

ValueError: cannot handle non-unique indices

需要注意的是 df_b 中的范围并不总是唯一的,这意味着某些间隔包含相同的时间段,在这些情况下,如果它使用 df_b 中第一个时间段的 id 就可以了,此外,df_b 中有 200 多行,df_a 中有 2000 多行,因此以 for 循环类型格式定义每个时间段需要很长时间,除非有比定义每个时间段更简单的方法,提前谢谢感谢您的帮助!如果这需要任何澄清,请告诉我!

df_a

time                    id
2019-01-07 22:02:56     NaN
2019-01-07 21:57:12     NaN
2019-01-08 09:35:30     NaN


df_b

date                    date_new               id
2019-01-07 21:50:56    2019-01-07 22:05:56     0
2019-01-08 09:30:30    2019-01-08 09:45:30     1

Expected Result

df_a     
time                    id
2019-01-07 22:02:56     0
2019-01-07 21:57:12     0
2019-01-08 09:35:30     1

最佳答案

让我重新表述一下您的问题。对于数据帧 df_a 中的每一行,您要检查其在 df_a['time'] 中的值是否在列 df_b[' date']df_b['date_new']。如果是这样,将 df_a["id"] 中的值设置为对应的 df_b["id"] 中的值。

如果这是你的问题,这是一个(非常粗略的)解决方案:

for ia, ra in df_a.iterrows():
    for ib, rb in df_b.iterrows():
        if (ra["time"]>=rb['date']) & (ra["time"]<=rb['date_new']):
            df_a.loc[ia, "id"] = rb["id"]
            break

关于python - 评估 df 的每一行中的日期时间函数是否落在另一个 df 的日期时间范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55454173/

相关文章:

python - 使用 Bokeh 循环动画

Python tkinter 框架不使用 Grid 填充父容器

sql - 如何在 SQL Server 2008 中设置日期时间变量?

c++ - Boost Date 回到过去

php - 将 Mysql 时间戳中的值更新为日期时间值。

python子进程模块无法执行shell

python - 使用pywinauto查找窗口需要很长时间

python - pandas 将列与另一列合并

python - 一种使用 Pandas 根据相应行将决策写入列的快速方法?

python - 两个多边形中的检查点(代码改进)