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

pandas如何将逗号分隔字符串列拆分为值对齐的分类列

实现方法

str.rsplit(',', expand=True) 是按元素拆分后的位置顺序填充列,不会识别元素本身的取值,因此无法实现相同值固定对齐到指定列的效果,可通过值匹配的方式实现需求,核心逻辑如下:

  • 明确目标列与匹配值的映射关系,ind_x列固定匹配indx值
  • 将原逗号分隔字符串拆分为值集合/生成哑变量矩阵,逐列判断当前行是否包含对应匹配值,包含则填入该值,不包含则留空

代码实现

基础版本(易读易改)

import pandas as pd

# 构造测试数据集
df = pd.DataFrame({
    'Col1': [
        'ind1,ind2,ind3',
        'ind1,ind5,ind3',
        'ind2,ind3,ind5,ind4'
    ]
})

# 配置目标列与对应匹配值
col_map = {
    'ind_1': 'ind1',
    'ind_2': 'ind2',
    'ind_3': 'ind3',
    'ind_4': 'ind4',
    'ind_5': 'ind5'
}

# 拆分原列为值集合,提升匹配效率
df['_val_set'] = df['Col1'].str.split(',').apply(set)

# 逐列生成目标字段
for col_name, match_val in col_map.items():
    df[col_name] = df['_val_set'].apply(lambda x: match_val if match_val in x else '')

# 删除临时辅助列
df = df.drop(columns=['_val_set'])

运行后输出结果完全符合预期:

Col1 ind_1 ind_2 ind_3 ind_4 ind_5
0        ind1,ind2,ind3  ind1  ind2  ind3            
1        ind1,ind5,ind3  ind1        ind3        ind5
2  ind2,ind3,ind5,ind4        ind2  ind3  ind4  ind5

高性能版本(适配万行以上大数据量)

如果数据集规模较大,可使用pandas内置的哑变量生成方法替代apply循环,运行效率更高:

# 生成逗号分隔值的0-1哑变量矩阵
dum_mat = df['Col1'].str.get_dummies(sep=',').astype(bool)

# 基于哑变量矩阵批量生成目标列
for col_name, match_val in col_map.items():
    df[col_name] = dum_mat[match_val].map({True: match_val, False: ''})

注意:如果后续需要对空值做计算,可将上述代码中的空字符串''替换为pd.NA或None,避免空字符串被识别为非空值。

内容的提问来源于stack exchange,提问作者Yana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:03:19