【发布时间】:2019-08-22 13:31:30
【问题描述】:
我是 python 新手,需要一些关于日期时间函数的问题的帮助。
我有df_a,其中有一个标题为time 的列,我正在尝试在此df_a 中创建一个新列id。
我希望id 列由时间是否包含在“date”和“date_new”之间的df_b 列的时间范围内来确定,例如第一行的日期为“ 2019-01-07 20:52:41”和“2019-01-07 21:07:41”的“date_new”(15 分钟的时间间隔),我希望该行的索引显示为我的 id在df_a 中,当时间为“2019-01-07 20:56:30”时(即 id=0)等等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: 无法处理非唯一索引
需要注意的是,df_b 中的范围并不总是唯一的,这意味着一些间隔包含相同的时间段,在这些情况下,如果它使用它所在的 df_b 中第一个时间段的 id 就可以了,另外 df_b 中有 200 多行,df_a 有 2000 多行,因此以 for-loop 类型格式定义每个时间段需要很长时间,除非有比定义每个时间段更简单的方法,提前谢谢为您的所有帮助!如果这可以使用任何澄清,请告诉我!
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["time"]中的最后一个值在预期结果中具有不同的值(2019-01-08 与 2019-01-07)。 -
谢谢指正,应该是01-08
标签: python pandas datetime for-loop series