人员相近行程日期合并算法实现与调试求助
行程合并算法求助
我编写了一段算法,用于识别人员的相邻行程,合并时间相近的行程的到达与离开日期,分离时间间隔较大的行程。
核心需求
- 合并时间间隔在1天内的相近行程
- 区分间隔较远的行程
- 额外规则:仅当前后行程的国家代码同属俄罗斯(RUS)或同属非俄罗斯时,才进行合并判断;若前后行程分属RUS和非RUS,则直接新增行程
我的代码
trips = dict() countries = dict() passengers = dict() for row in df.itertuples(index=False): party_rk, passenger, created_dt, arrival_dt, departure_dt, country_cd = row # 首次添加用户行程 if trips.get(party_rk, 'Empty') == 'Empty': trips[party_rk] = [] trips[party_rk].append([created_dt, arrival_dt, departure_dt]) countries[party_rk] = [] countries[party_rk].append(set(country_cd)) passengers[party_rk] = [] passengers[party_rk].append(set([tuple(passenger)])) else: trips_by_party = trips[party_rk] end_last_trip = trips_by_party[-1][1] previous_country_cd = countries[party_rk][-1] if (country_cd == 'RUS' and previous_country_cd == 'RUS') or (country_cd != 'RUS' and previous_country_cd != 'RUS'): # 若下一行程的到达时间与上一行程结束时间间隔≤1天,则合并行程 if arrival_dt <= end_last_trip + datetime.timedelta(days=1): trips[party_rk][-1][1] = max(end_last_trip, departure_dt) countries[party_rk][-1].update(set(country_cd)) add_person(passengers[party_rk][-1], passenger) # 间隔超过1天,新增行程 else: trips[party_rk].append([created_dt, arrival_dt, departure_dt]) countries[party_rk].append(set(country_cd)) passengers[party_rk].append(set([tuple(passenger)])) else: # 前后行程国家分属RUS和非RUS,直接新增行程 trips[party_rk].append([created_dt, arrival_dt, departure_dt]) countries[party_rk].append(set(country_cd)) passengers[party_rk].append(set([tuple(passenger)]))
示例数据期望处理结果
- 行程:2023-11-04 - 2023-11-11
- 行程:2024-04-13 - 2024-04-20
内容的提问来源于stack exchange,提问作者Tanya Gaychenkova
相关产品推荐
相关产品推荐

