我是 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/