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

使用Pandas按分隔符拆分两列对应行并复制其余列内容

问题与解决方法

需求场景

原始Excel表格结构如下:

Col1    Col2                          Col3            Col4
John    English\nMaths                34\n33          Pass
Sam     Science                       40              Pass
Jack    English\nHistory\nGeography   89\n07\n98      Pass

需要将其转换为每行对应单个科目与分数的格式,其他列内容保持不变:

Col1    Col2      Col3    Col4
John    English   34      Pass
John    Maths     33      Pass
Sam     Science   40      Pass
Jack    English   89      Pass
Jack    History   07      Pass     
Jack    Geography 98      Pass

核心要求:Col2(科目)和Col3(分数)以\n为分隔符拆分,每个科目-分数对单独生成一行,其余列内容原样复制。

原尝试代码

split_cols = ['Col2', 'Col3']

# 循环拆分指定列
separator = '\n'
for col in split_cols:
    df[[f'{col}_Split1', f'{col}_Split2']] = df[col].str.split(separator, n=1, expand=True).fillna('')

# 创建两个包含目标列的新DataFrame
df1 = df[['Col1', 'Col2_Split1', 'Col3_Split1', 'Col4']].rename(columns={'Col2_Split1': 'D', 'Col3_Split1': 'C'})
df2 = df[['Col1', 'Col2_Split2', 'Col3_Split2', 'Col4']].rename(columns={'Col2_Split2': 'D', 'Col3_Split2': 'C'})

# 合并两个DataFrame
final_df = pd.concat([df1, df2], ignore_index=True)

# 输出结果
print(final_df)

问题分析与优化方案

原代码通过str.split(n=1)仅能拆分出最多两个子项,无法处理像Jack这样有3个及以上科目的情况,通用性不足。

推荐使用Pandas的explode方法,直接对拆分后的列表列进行行展开,确保科目与分数一一对应:

import pandas as pd

# 构造示例数据(实际可通过pd.read_excel读取文件)
data = {
    'Col1': ['John', 'Sam', 'Jack'],
    'Col2': ['English\nMaths', 'Science', 'English\nHistory\nGeography'],
    'Col3': ['34\n33', '40', '89\n07\n98'],
    'Col4': ['Pass', 'Pass', 'Pass']
}
df = pd.DataFrame(data)

# 将Col2和Col3按\n拆分为列表
df['Col2'] = df['Col2'].str.split('\n')
df['Col3'] = df['Col3'].str.split('\n')

# 同时展开两个列表列,生成目标格式
final_df = df.explode(['Col2', 'Col3'], ignore_index=True)

# 输出结果
print(final_df)

说明

  • str.split('\n')将单元格内的字符串按换行符拆分为列表,适配任意数量的科目/分数项;
  • explode(['Col2', 'Col3'])会同时展开这两个列表列,保证每一行的科目和分数严格对应;
  • ignore_index=True重置结果的索引,避免重复索引问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:43:35