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
相关产品推荐
相关产品推荐

