如何将同CaseNr的多行事故数据按列合并为单行?
车辆事故关联行合并实现方案
你检索merge相关操作找不到实现方式是正常的,这个需求不属于多表关联场景,本质是将同事故编号下的多行车辆数据,从长表结构转为宽表结构,通过分组透视即可实现,不需要关联操作。
核心处理步骤
- 按事故编号
CaseNr分组,给同一起事故内的涉事车辆生成从1开始的递增序号,作为后续拆分列的后缀标识 - 保留事故维度的固定公共字段(
CaseNr、AccType,同一起事故下这两个字段值完全一致),将车辆维度的属性字段按生成的序号展开为多列 - 无对应车辆的字段自动填充
NaN,最后按业务规则补充MainFac字段即可
参考实现代码(pandas环境)
import pandas as pd import numpy as np # raw_df为读取的原始事故数据表 # 1. 为同事故下的车辆生成序号 raw_df['v_seq'] = raw_df.groupby('CaseNr').cumcount() + 1 # 2. 透视转换为宽表 wide_df = raw_df.pivot( index=['CaseNr', 'AccType'], columns='v_seq', values=['Vehicle', 'Model', 'VehicleMass'] ) # 3. 格式化列名为 字段名_序号 的格式 wide_df.columns = [f'{col[0]}_{col[1]}' for col in wide_df.columns] wide_df = wide_df.reset_index() # 4. 按需调整列名、补全字段 # 例如需要把VehicleMass_2改为带空格的Vehicle Mass_2,直接调用rename即可 wide_df = wide_df.rename(columns={'VehicleMass_2': 'Vehicle Mass_2'}) # 新增MainFac字段,按自身业务规则赋值即可,默认先填充NaN wide_df['MainFac'] = np.nan
说明:如果单起事故最多涉及3台车辆,代码会自动生成带
_3后缀的对应车辆字段,如果目标表不需要第三台车辆的字段,直接drop对应列即可;也可以通过reindex方法指定列顺序,和你预期的目标表字段顺序完全对齐。
内容的提问来源于stack exchange,提问作者James Hwang
相关产品推荐
相关产品推荐

