You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

拆分含分隔符的列但保留原有行结构(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:05:11