拆分DataFrame分隔列并重塑:提取车辆唯一传感器编码
解决方案
可以通过以下步骤处理原始DataFrame,得到仅包含Car_code和唯一传感器编码的目标结果:
import pandas as pd # 原始DataFrame(用户提供的示例) df = pd.DataFrame([['x','iii-2019-10-16','18/04/2019','115/556/879/115'], ['x','iii-2019-10-16','21/07/2019','87/998/115'], ['x','iii-2019-10-16','','115/556/879'], ['x','zzz-2020-10-25','12/04/2022',''], ['y','qqq-2018-05-28','10/12/2017','789/554/745'], ['y','qqq-2018-05-28','15/02/2018','789/554/75'], ['y','ooo-2019-11-22','30/05/2019','55'], ['y','rrr-16-12-2020','16/12/2020',''], ['z','ppt-2019-12-03','07/02/2018','889/654/750'], ['z','ttt-2019-12-03','28/05/2019','119/55/75'], ['z','ttt-2019-12-03','09/09/2019'], ['z','ttt-2019-12-03','30/09/2019'] ], columns=['Car_code','car_model','update_Date','sensor_codes']) # 1. 填充sensor_codes列的空值/缺失值为空字符串,避免后续分割报错 df['sensor_codes'] = df['sensor_codes'].fillna('') # 2. 按/符号分割每个单元格的传感器编码为列表 df['sensor_codes'] = df['sensor_codes'].str.split('/') # 3. 将列表拆分为多行,每个编码对应一行 exploded_df = df.explode('sensor_codes') # 4. 过滤掉空的传感器编码行 filtered_df = exploded_df[exploded_df['sensor_codes'] != ''] # 5. 保留Car_code和传感器编码列,去重确保每个Car_code下编码唯一 result_df = filtered_df[['Car_code', 'sensor_codes']].drop_duplicates() # 可选:重命名列名并重置索引,让结果更整洁 result_df = result_df.rename(columns={'sensor_codes': 'sensor_code'}).reset_index(drop=True) print(result_df)
关键步骤说明:
- 填充空值:原始数据存在
sensor_codes为空或缺失的情况,填充为空字符串后能避免分割操作抛出异常。 - 分割编码:用
str.split('/')把多编码单元格转为列表格式,为拆分多行做准备。 - 拆分多行:
explode()方法将列表中的每个编码拆分为单独一行,同时保留对应的Car_code。 - 过滤无效行:移除拆分后产生的空编码行,剔除无效数据。
- 去重:通过
drop_duplicates()确保同一Car_code下的传感器编码不重复。
运行后得到的结果示例(部分):
Car_code sensor_code 0 x 115 1 x 556 2 x 879 3 x 87 4 x 998 ...
内容的提问来源于stack exchange,提问作者Natali
相关产品推荐
相关产品推荐

