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

如何在Pandas DataFrame中拆分多列并解决重索引报错

解决Pandas按分隔符拆分并展开多列的问题

问题场景

原始DataFrame:

preferred_title_symbol                      mim_number  MDR_code    MDR_term
0   17-BETA HYDROXYSTEROID DEHYDROGENASE III    264300.0    10037122    pseudohermaphroditism
1   2,4-DIENOYL-CoA REDUCTASE DEFICIENCY        616034.0    10027417 | 10081311 | 10059750  leukodystrophy | metabolic acidosis | muscle retention

需要将MDR_code和MDR_term列按分隔符|拆分后展开,得到预期输出:

preferred_title_symbol                      mim_number  MDR_code    MDR_term
0   17-BETA HYDROXYSTEROID DEHYDROGENASE III    264300.0    10037122    pseudohermaphroditism
1   2,4-DIENOYL-CoA REDUCTASE DEFICIENCY        616034.0    10027417    leukodystrophy
1   2,4-DIENOYL-CoA REDUCTASE DEFICIENCY        616034.0    10081311    metabolic acidosis
1   2,4-DIENOYL-CoA REDUCTASE DEFICIENCY        616034.0    10059750    muscle retention

错误原因分析

你之前的代码报错ValueError: cannot reindex on an axis with duplicate labels,核心原因是explode操作后,拆分出的多条记录会保留原行索引(比如行1拆分后生成3条索引为1的记录),此时用join关联原DataFrame的列时,原列的索引只有0和1,无法匹配重复索引,导致索引冲突。另外原始数据中|前后带有空格,拆分后需要额外处理才能去除冗余空格。

正确解决方案

方法一:拆分后同时展开多列(推荐)

先对目标列完成字符串拆分(同时处理空格),再一次性explode多列,自动保留其他列的对应值:

import pandas as pd

# 拆分列,用正则匹配带空格的分隔符,同时去除前后空格
df['MDR_code'] = df['MDR_code'].str.split(r'\s*\|\s*')
df['MDR_term'] = df['MDR_term'].str.split(r'\s*\|\s*')

# 同时展开两列,自动关联其他列数据
result = df.explode(['MDR_code', 'MDR_term'])

方法二:用apply逐行处理

如果需要更灵活的自定义逻辑,可以用apply将每行的拆分结果转为Series后展开:

result = df.apply(
    lambda row: pd.Series({
        'preferred_title_symbol': row['preferred_title_symbol'],
        'mim_number': row['mim_number'],
        'MDR_code': row['MDR_code'].split(r'\s*\|\s*'),
        'MDR_term': row['MDR_term'].split(r'\s*\|\s*')
    }).explode(),
    axis=1
).reset_index(drop=False).rename(columns={'index': 'original_index'})

两种方法都能实现预期效果,且解决了空格冗余和索引冲突的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 16:43:25