拆分含分隔符的列但保留原有行结构(Pandas处理)
问题
我有一个包含100多列、1000多行的Pandas DataFrame,部分列的连续行中存在用竖线(|)分隔的重复内容。我需要把这些列里的分隔内容拆分到对应行的单个字符串中,不能生成新行。目前我用df.apply(lambda x: x.str.split('|'), axis = 1)生成了列表,但explode()会新增行,不符合需求。
原DataFrame
**Cars Color Customization Type** Buick yellow radio Car Chevy gray|brown|blue radio|exhaust truck Chevy gray|brown|blue radio|exhaust truck Chevy gray|brown|blue radio|exhaust truck Mercedes red|blue seats|carpets car Mercedes red|blue seats|carpets car
代码定义
import pandas as pd df = pd.DataFrame({ 'Cars': ['Buick', 'Chevy', 'Chevy', 'Chevy', 'Mercedes', 'Mercedes'], 'Color': ['yellow', 'gray|brown|blue', 'gray|brown|blue', 'gray|brown|blue', 'red|blue', 'red|blue'], 'Customization': ['radio', 'radio|exhaust', 'radio|exhaust', 'radio|exhaust', 'seats|carpets', 'seats|carpets'], 'Type': ['car', 'truck', 'truck', 'truck', 'car', 'car'] })
期望输出
**Cars Color Customization Type** Buick yellow radio Car Chevy gray radio truck Chevy brown exhaust truck Chevy blue truck Mercedes red seats car Mercedes blue carpets car
解决方案
核心思路是:先对目标列拆分得到列表,再按分组匹配行索引,把对应位置的元素分配到每一行。
步骤1:指定需要拆分的列
直接标记要处理的列(比如这里的Color和Customization):
split_cols = ['Color', 'Customization']
步骤2:拆分目标列的字符串
把列中的分隔字符串转为列表格式:
df[split_cols] = df[split_cols].apply(lambda x: x.str.split('|'))
步骤3:按分组分配拆分元素
以Cars和Type作为分组依据(同组行对应拆分后的不同元素),遍历每组,按行索引取出对应位置的元素:
def assign_split_values(group): for col in split_cols: # 取分组内第一行的拆分列表(同组所有行的列表内容一致) split_list = group[col].iloc[0] # 按行索引分配元素,索引超出列表长度时填充空字符串 group[col] = [split_list[i] if i < len(split_list) else '' for i in range(len(group))] return group # 分组处理并生成结果 result_df = df.groupby(['Cars', 'Type'], group_keys=False).apply(assign_split_values)
步骤4:查看最终结果
运行后打印result_df即可得到期望输出:
print(result_df)
输出示例:
Cars Color Customization Type 0 Buick yellow radio car 1 Chevy gray radio truck 2 Chevy brown exhaust truck 3 Chevy blue truck 4 Mercedes red seats car 5 Mercedes blue carpets car
补充说明
- 支持多列批量处理,只需把目标列加入
split_cols即可 - 自动处理分组行数多于拆分元素数量的情况,超出部分填充空字符串
- 针对1000多行的数据量,该方法效率足够,不会有性能瓶颈
内容的提问来源于stack exchange,提问作者ryda
相关产品推荐
相关产品推荐

