如何在Pandas中对DataFrame多列执行Explode拆分操作?
在Pandas中对多列执行explode操作并保留原始列
首先明确输入的DataFrame结构:
import pandas as pd df = pd.DataFrame({ 'SRCA': ['A,B', 'E,C,D'], 'SRCB': ['G,H', 'Z,Y,K'], 'SRC_CNTA': [1, 2], 'SRC_CNTB': [1, 2] })
输入数据展示:
SRCA SRCB SRC_CNTA SRC_CNTB 0 A,B G,H 1 1 1 E,C,D Z,Y,K 2 2
你当前使用的代码会直接替换SRCA和SRCB列的值,无法保留原始的逗号分隔列。要得到包含原始列+拆分后列的预期输出,可按以下方式实现:
推荐方案(Pandas 1.3.0+)
- 先将需要拆分的列通过
str.split(',')转换为列表格式,创建新的拆分列; - 使用
explode同时对多个新列执行拆分操作,保留所有原始列。
代码实现:
# 生成拆分后的列表列 df['SRCA_EXP'] = df['SRCA'].str.split(',') df['SRCB_EXP'] = df['SRCB'].str.split(',') # 对多列执行explode并重置索引 result = df.explode(['SRCA_EXP', 'SRCB_EXP'], ignore_index=True)
执行后得到的结果:
SRCA SRCB SRC_CNTA SRC_CNTB SRCA_EXP SRCB_EXP 0 A,B G,H 1 1 A G 1 A,B G,H 1 1 B H 2 E,C,D Z,Y,K 2 2 E Z 3 E,C,D Z,Y,K 2 2 C Y 4 E,C,D Z,Y,K 2 2 D K
低版本Pandas兼容方案(低于1.3.0)
如果你的Pandas版本不支持多列同时explode,可以通过设置索引保留原始列后再执行拆分:
# 先生成分拆列 df['SRCA_EXP'] = df['SRCA'].str.split(',') df['SRCB_EXP'] = df['SRCB'].str.split(',') # 设置原始列为索引,拆分后恢复索引 result = df.set_index(['SRCA', 'SRCB', 'SRC_CNTA', 'SRC_CNTB'])\ .apply(pd.Series.explode)\ .reset_index()
内容的提问来源于stack exchange,提问作者kmr
相关产品推荐
相关产品推荐

