基于日期重叠筛选DataFrame:请求与服务匹配代码问题排查
问题排查与解决建议
核心问题分析
- 日期列未转为datetime类型:当前代码中日期以字符串格式存储,直接进行大小比较会遵循字符串字典序而非时间顺序,导致重叠判断逻辑完全失效。例如字符串
01/04/2023(4月1日)与10/03/2023(3月10日)比较时,会被判定为前者更小,但实际时间是3月10日更早,直接干扰了服务活跃时段的判断。 - 无对应服务的客户逻辑受日期类型影响:像Client101这类无对应服务记录的客户,理论上应直接归入
new_requests,但日期类型错误可能导致判断逻辑异常。
修正步骤
1. 统一转换日期列为datetime类型
先将两个DataFrame的日期列转为标准datetime格式,指定%d/%m/%Y格式避免自动解析错误:
# 转换Requests的日期列 requests['Event Start Date'] = pd.to_datetime(requests['Event Start Date'], format='%d/%m/%Y') requests['Event End Date'] = pd.to_datetime(requests['Event End Date'], format='%d/%m/%Y') # 转换LTS的日期列 lts['Event Start Date'] = pd.to_datetime(lts['Event Start Date'], format='%d/%m/%Y') lts['Event End Date'] = pd.to_datetime(lts['Event End Date'], format='%d/%m/%Y')
2. 优化循环拼接逻辑(提升效率)
原代码反复使用pd.concat拼接DataFrame效率极低,改用列表收集符合条件的行,最后统一转为DataFrame:
new_requests_list = [] for index, request_row in requests.iterrows(): relevant_lts_rows = lts[lts['Client ID'] == request_row['Client ID']] # 日期类型修正后,原重叠判断逻辑可正常生效 overlapping_events = relevant_lts_rows[ (relevant_lts_rows['Event Start Date'] <= request_row['Event End Date']) & ((relevant_lts_rows['Event End Date'] > request_row['Event Start Date']) | pd.isnull(relevant_lts_rows['Event End Date'])) ] if overlapping_events.empty: new_requests_list.append(request_row) new_requests = pd.DataFrame(new_requests_list).reset_index(drop=True)
3. 生成「Currently Open」DataFrame
通过反选new_requests的方式快速得到目标数据集:
# 先标记所有请求是否有活跃服务 requests['has_active_service'] = requests.apply( lambda row: not lts[ (lts['Client ID'] == row['Client ID']) & (lts['Event Start Date'] <= row['Event End Date']) & ((lts['Event End Date'] > row['Event Start Date']) | pd.isnull(lts['Event End Date'])) ].empty, axis=1 ) # 拆分两个结果DataFrame currently_open = requests[requests['has_active_service']].reset_index(drop=True) new_requests = requests[~requests['has_active_service']].reset_index(drop=True)
验证结果
修正后运行代码,将完全匹配期望输出:
new_requests包含Client100的请求100、Client101的请求102currently_open包含Client100的请求101、Client102的请求103
内容的提问来源于stack exchange,提问作者Chizo
相关产品推荐
相关产品推荐

