Python 熊猫:检查来自一个数据帧的日期是否介于来自另一个数据帧的两个日期和sobstitute值之间

Python 熊猫:检查来自一个数据帧的日期是否介于来自另一个数据帧的两个日期和sobstitute值之间,python,pandas,Python,Pandas,我有两个数据帧: df1 df2: 我必须检查一下: df1(日期)介于df2(开始时间)和df2(结束时间)之间 df1(组)=df2(组) 然后用df1(故障)替换df2(故障)。 预期结果如下所示: start_time end_time group failure 2018-04-01 00:00:00+01:00 2018-04-01 23:59:59+01:00 E1 1

我有两个数据帧:

df1

df2:

我必须检查一下:

  • df1(日期)介于df2(开始时间)和df2(结束时间)之间

  • df1(组)=df2(组)

然后用df1(故障)替换df2(故障)。 预期结果如下所示:

        start_time                   end_time           group      failure
2018-04-01 00:00:00+01:00   2018-04-01 23:59:59+01:00     E1         1
2018-04-27 19:00:00+01:00   2018-04-27 21:29:59+01:00     E1         1
2018-04-27 06:00:00+01:00   2018-04-27 12:59:59+01:00     E1         1
2018-04-26 19:00:00+01:00   2018-04-26 21:29:59+01:00     E1         1
2018-04-26 06:00:00+01:00   2018-04-26 12:59:59+01:00     E1         1
2018-04-25 19:00:00+01:00   2018-04-25 21:29:59+01:00     E1         1
2018-04-25 06:00:00+01:00   2018-04-25 12:59:59+01:00     E1         1
2018-04-24 19:00:00+01:00   2018-04-24 21:29:59+01:00     E1         1
2018-04-24 06:00:00+01:00   2018-04-24 12:59:59+01:00     E1         1
2018-04-23 19:00:00+01:00   2018-04-23 21:29:59+01:00     E1         1
2018-04-23 06:00:00+01:00   2018-04-23 12:59:59+01:00     E1         1
2018-04-16 00:00:00+01:00   2018-04-22 23:59:59+01:00     E1         0
2018-04-28 00:00:00+01:00   2018-04-29 23:59:59+01:00     E1         1
2018-04-07 00:00:00+01:00   2018-04-08 23:59:59+01:00     E1         1
2018-04-06 19:00:00+01:00   2018-04-06 21:29:59+01:00     E1         1
2018-04-06 06:00:00+01:00   2018-04-06 12:59:59+01:00     E1         1
2018-04-09 00:00:00+01:00   2018-04-15 23:59:59+01:00     E1         1
2018-04-05 19:00:00+01:00   2018-04-05 21:29:59+01:00     E1         1
2018-04-04 06:00:00+01:00   2018-04-04 12:59:59+01:00     E1         1
2018-04-03 06:00:00+01:00   2018-04-03 12:59:59+01:00     E1         1
2018-04-02 00:00:00+01:00   2018-04-02 23:59:59+01:00     E1         1
2018-04-04 19:00:00+01:00   2018-04-04 21:29:59+01:00     E1         1
2018-04-05 06:00:00+01:00   2018-04-05 12:59:59+01:00     E1         1
2018-04-03 19:00:00+01:00   2018-04-03 21:29:59+01:00     E1         1
2018-04-27 06:00:00+01:00   2018-04-27 12:59:59+01:00     E2         1
2018-04-02 00:00:00+01:00   2018-04-02 23:59:59+01:00     E2         1
2018-04-26 19:00:00+01:00   2018-04-26 21:29:59+01:00     E2         1
2018-04-25 06:00:00+01:00   2018-04-25 12:59:59+01:00     E2         1
2018-04-03 06:00:00+01:00   2018-04-03 12:59:59+01:00     E2         1
2018-04-26 06:00:00+01:00   2018-04-26 12:59:59+01:00     E2         1
2018-04-27 19:00:00+01:00   2018-04-27 21:29:59+01:00     E2         1
2018-04-01 00:00:00+01:00   2018-04-01 23:59:59+01:00     E2         1
2018-04-25 19:00:00+01:00   2018-04-25 21:29:59+01:00     E2         1
2018-04-03 19:00:00+01:00   2018-04-03 21:29:59+01:00     E2         1
2018-04-24 19:00:00+01:00   2018-04-24 21:29:59+01:00     E2         1
2018-04-04 06:00:00+01:00   2018-04-04 12:59:59+01:00     E2         1
2018-04-24 06:00:00+01:00   2018-04-24 12:59:59+01:00     E2         1
2018-04-23 19:00:00+01:00   2018-04-23 21:29:59+01:00     E2         1
2018-04-04 19:00:00+01:00   2018-04-04 21:29:59+01:00     E2         1
2018-04-23 06:00:00+01:00   2018-04-23 12:59:59+01:00     E2         1
2018-04-16 00:00:00+01:00   2018-04-22 23:59:59+01:00     E2         1
2018-04-05 06:00:00+01:00   2018-04-05 12:59:59+01:00     E2         1
2018-04-09 00:00:00+01:00   2018-04-15 23:59:59+01:00     E2         1
2018-04-07 00:00:00+01:00   2018-04-08 23:59:59+01:00     E2         1
2018-04-05 19:00:00+01:00   2018-04-05 21:29:59+01:00     E2         1
2018-04-06 19:00:00+01:00   2018-04-06 21:29:59+01:00     E2         1
2018-04-06 06:00:00+01:00   2018-04-06 12:59:59+01:00     E2         1
2018-04-28 00:00:00+01:00   2018-04-29 23:59:59+01:00     E2         1

我尝试过使用if函数,但我得到了一个错误:只能比较具有相同标签的序列对象。有什么建议吗?提前谢谢你

执行以下操作后,我可以比较日期:-

e1['date'] = e1['date'].apply( lambda x: pd.to_datetime(x).tz_localize('US/Eastern'))
e2['start_time'] = e2['start_time'].apply( lambda x: 
pd.to_datetime(x).tz_localize('US/Eastern'))
e2['end_time'] = e2['end_time'].apply( lambda x: pd.to_datetime(x).tz_localize('US/Eastern'))
我合并了两个表,然后检查日期是否在开始时间和结束时间之间,以替换失败变量

故障_x为E2,故障_y为E1数据帧:-

df = e2.merge(e1,on='group',how='left')
df['failure_x'] = np.where((df['start_time'] <= df['date']) & (df['date'] <=  df['end_time']), df['failure_y'], df['failure_x'])
df=e2.merge(e1,on='group',how='left')

df['failure_x']=np。其中((df['start_time']在执行以下操作后,我可以比较日期:-

e1['date'] = e1['date'].apply( lambda x: pd.to_datetime(x).tz_localize('US/Eastern'))
e2['start_time'] = e2['start_time'].apply( lambda x: 
pd.to_datetime(x).tz_localize('US/Eastern'))
e2['end_time'] = e2['end_time'].apply( lambda x: pd.to_datetime(x).tz_localize('US/Eastern'))
我合并了两个表,然后检查日期是否在开始时间和结束时间之间,以替换失败变量

故障_x为E2,故障_y为E1数据帧:-

df = e2.merge(e1,on='group',how='left')
df['failure_x'] = np.where((df['start_time'] <= df['date']) & (df['date'] <=  df['end_time']), df['failure_y'], df['failure_x'])
df=e2.merge(e1,on='group',how='left')

df['failure\u x']=np.where((df['start\u time']try:
df1[~df1.date.isin(df2.start\u time.values)]
至少这会让你知道它是否与你正在查找的记录相匹配。我没有发现任何错误,但它不会改变值!你的两列都是datetime对象吗?你收到的错误可能表明其中一个是字符串,另一个是datetimeYeah,它不会改变值,只是检查日期
列在df2
开始时间
列中的任何位置都匹配。替换仍要实现的逻辑..@DanielR。他没有收到任何错误:-)尝试:
df1[~df1.date.isin(df2.start\u time.values)]
至少这会让你知道它是否与你正在查找的记录相匹配。我没有发现任何错误,但它不会改变值!你的两列都是datetime对象吗?你收到的错误可能表明其中一个是字符串,另一个是datetimeYeah,它不会改变值,只是检查日期
列在df2
开始时间
列中的任何位置都匹配。替换仍在执行的逻辑..@DanielR。他没有收到任何错误:-)你没有弄错所有那些“df”吗?我是说,应该是df,df1或df2吗?你没有弄错所有那些“df”吗?我是说,应该是df,df1或df2吗