如何为行程数据集末尾匹配并附加对应提示信息?
如何为行程末尾附加对应的提示信息?
看起来你已经用Pandas读入了两个CSV文件,接下来我们可以一步步实现给每个行程匹配对应提示的需求。先理清楚数据特点:同一个行程ID可能对应多段行程(比如1009在11-03和11-14各有一段),每段行程结束后会有对应的提示,我们需要把提示精准匹配到对应的行程段上。
步骤1:统一时间格式
首先得把两个数据里的timestamp转换成Pandas的datetime类型,这样才能做时间比较和排序:
import pandas as pd # 读入数据(你已经写了这两行,这里再确认下) coordinates = pd.read_csv('coordinates.csv') mode = pd.read_csv('prompts.csv') # 转换时间格式 coordinates['timestamp'] = pd.to_datetime(coordinates['timestamp']) mode['timestamp'] = pd.to_datetime(mode['timestamp'])
方法一:在行程段末尾添加提示行
如果你的需求是在每段行程的最后一条记录后面新增一行提示信息,可以这么做:
- 先给行程数据添加日期列,用来区分同一ID下的不同行程段(比如1009的两天行程):
coordinates['trip_date'] = coordinates['timestamp'].dt.date mode['trip_date'] = mode['timestamp'].dt.date
- 计算每段行程的结束时间(同一ID+日期下的最晚时间):
trip_end_times = coordinates.groupby(['行程ID', 'trip_date'])['timestamp'].max().reset_index(name='trip_end_time')
- 把行程结束时间和提示数据合并,匹配同一ID、同一日期的提示:
merged_prompts = pd.merge(trip_end_times, mode, on=['行程ID', 'trip_date'], how='left')
- 把提示数据转换成和行程数据一致的格式,然后拼接到原数据后面,再排序:
# 格式化提示数据,对齐行程数据的列 formatted_prompts = merged_prompts.rename(columns={'timestamp': 'prompt_time', 'mode': '提示方式'}) formatted_prompts['timestamp'] = formatted_prompts['prompt_time'] formatted_prompts = formatted_prompts[['行程ID', 'timestamp', '提示方式']] # 给原行程数据添加空的提示方式列 coordinates['提示方式'] = None # 拼接并排序 final_result = pd.concat([coordinates, formatted_prompts]).sort_values(['行程ID', 'timestamp']).reset_index(drop=True)
这样最终的final_result里,每段行程的最后一行就是对应的提示信息啦。
方法二:给每条行程记录附加提示信息
如果你的需求是给行程里的每条记录都标记对应的提示(比如所有1009的11-03行程记录都带上metro提示),可以用merge_asof来高效匹配:
# 先对两个数据按行程ID和时间排序 coordinates_sorted = coordinates.sort_values(['行程ID', 'timestamp']) mode_sorted = mode.sort_values(['行程ID', 'timestamp']) # 按行程ID匹配,找到每条行程时间之后的第一个提示 final_result = pd.merge_asof( coordinates_sorted, mode_sorted, on='timestamp', by='行程ID', direction='forward' # forward表示找当前时间之后最近的匹配项 )
这个方法会自动给同一行程段的所有记录匹配到对应的提示,非常适合需要批量标记的场景。
内容的提问来源于stack exchange,提问作者adil blanco
相关产品推荐
相关产品推荐

