Python实现DataFrame每行日期关联事件按时间先后排序
按行关联排序日期与事件对的Python实现方案
我们可以用pandas高效实现该需求,单核心即可处理百万行级数据,如需更高性能可搭配swift库扩展并行能力。
实现步骤
- 导入pandas库,读取你的表格数据(支持csv、excel等常见格式)
- 定义单行处理逻辑:将每行的日期-事件对打包为元组、转换日期格式后排序、再展开为固定顺序的6列
- 对全表应用处理逻辑后导出结果
完整代码示例
import pandas as pd # 1. 读取你的数据,此处以csv为例,excel可换用pd.read_excel # df = pd.read_csv("你的数据文件路径.csv") # 构造测试数据示例,可跳过该步直接读取你的真实数据 df = pd.DataFrame({ 'date1': ['2023-05-01', '2023-02-10', '2023-06-15'], 'event1': ['出差', '会议', '培训'], 'date2': ['2023-03-12', '2023-01-05', '2023-04-20'], 'event2': ['团建', '休假', '项目上线'], 'date3': ['2023-06-08', '2023-03-20', '2023-07-01'], 'event3': ['年会', '客户拜访', '述职'] }) # 2. 定义行处理函数 def sort_date_events(row): # 打包三对日期事件元组 pairs = [ (pd.to_datetime(row['date1']), row['event1']), (pd.to_datetime(row['date2']), row['event2']), (pd.to_datetime(row['date3']), row['event3']) ] # 按日期升序排序,空日期默认排在最后,如需提前可加na_position='first'参数 pairs_sorted = sorted(pairs, key=lambda x: x[0]) # 展开为排序后的6个值,日期转回原字符串格式可调整strftime参数 return pd.Series([ pairs_sorted[0][0].strftime('%Y-%m-%d'), pairs_sorted[0][1], pairs_sorted[1][0].strftime('%Y-%m-%d'), pairs_sorted[1][1], pairs_sorted[2][0].strftime('%Y-%m-%d'), pairs_sorted[2][1] ], index=['date1', 'event1', 'date2', 'event2', 'date3', 'event3']) # 3. 全表应用处理逻辑,axis=1表示按行处理 df_sorted = df.apply(sort_date_events, axis=1) # 4. 导出结果 # df_sorted.to_csv("排序后结果.csv", index=False)
注意事项
- 如果你的日期格式不是
YYYY-MM-DD,需要在pd.to_datetime中传入format参数指定格式,避免解析错误 - 若数据量超过100万行,可将
apply替换为swifter.apply开启并行处理,提升执行效率 - 若存在空日期/空事件值,可在排序前先过滤或填充默认值,避免排序结果不符合预期
内容的提问来源于stack exchange,提问作者dataanalytics
相关产品推荐
相关产品推荐

