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

如何将含逗号分隔值的分组Pandas DataFrame拆分为多行?

解决Pandas DataFrame多列同步拆分并生成单行对应单个exam的方案

我明白你遇到的麻烦了——单独用split加explode拆分时,很容易因为没同步处理所有关联列,导致col1、col2和exams的对应关系乱掉。咱们可以通过先把所有需要拆分的列转成列表,再一次性拆分多列的方式解决这个问题,具体操作如下:

步骤1:构造示例数据

先还原你给出的示例DataFrame:

import pandas as pd

data = {
    'col1': ['0,0,0', '0,1,0,20', '0,0,0,30'],
    'col2': ['0,0,0', '0,0,2,20', '0,0,20,20'],
    'name': ['A1', 'A2', 'A3'],
    'exams': ['exm1,exm2,exm3', 'exm1,exm2,exm4,exm5', 'exm1,exm2,exm3,exm5']
}
df = pd.DataFrame(data)

步骤2:同步拆分多列(推荐方案,Pandas 1.3.0+支持)

从Pandas 1.3.0版本开始,explode方法支持同时传入多个列名,这样就能保证拆分后col1、col2和exams的对应关系完全匹配:

# 将col1、col2、exams按逗号拆分为列表
df[['col1', 'col2', 'exams']] = df[['col1', 'col2', 'exams']].apply(lambda x: x.str.split(','))

# 一次性拆分这三列,同时重置索引
result_df = df.explode(['col1', 'col2', 'exams'], ignore_index=True)

# 可选:将col1和col2转换为整数类型(根据你的需求选择)
result_df[['col1', 'col2']] = result_df[['col1', 'col2']].astype(int)

执行后得到的结果就是你想要的每行对应单个exam的形式:

col1  col2 name  exams
0     0     0   A1  exm1
1     0     0   A1  exm2
2     0     0   A1  exm3
3     0     0   A2  exm1
4     1     0   A2  exm2
5     0     2   A2  exm4
6    20    20   A2  exm5
7     0     0   A3  exm1
8     0     0   A3  exm2
9     0    20   A3  exm3
10   30    20   A3  exm5

兼容低版本Pandas的方案(适用于1.3.0以下版本)

如果你的Pandas版本较低,不支持多列explode,可以通过zip将每行的三个列表打包,再拆分的方式实现:

# 先将col1、col2、exams拆分为列表
df[['col1', 'col2', 'exams']] = df[['col1', 'col2', 'exams']].apply(lambda x: x.str.split(','))

# 将每行的三个列表打包成元组列表
df['combined'] = df.apply(lambda row: list(zip(row['col1'], row['col2'], row['exams'])), axis=1)

# 拆分combined列
result_df = df.explode('combined', ignore_index=True)

# 将元组拆分回单独的列
result_df[['col1', 'col2', 'exams']] = pd.DataFrame(result_df['combined'].tolist(), index=result_df.index)

# 清理临时列
result_df.drop('combined', axis=1, inplace=True)

# 可选转换数据类型
result_df[['col1', 'col2']] = result_df[['col1', 'col2']].astype(int)

注意事项

  • 确保每行的col1、col2、exams拆分后的元素数量完全一致,否则会出现匹配错误。如果存在数量不一致的行,需要先对数据进行清洗(比如补全缺失值或过滤异常行)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:02:41