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

如何拆分Pandas DataFrame中的列并保留每条记录的关联键信息

如何拆分DataFrame的列并保留其余列的对应数据?

首先来看你的原始数据和需求:

你有这样的初始DataFrame:

import pandas as pd

df = pd.DataFrame(
    {"ID": ["P-1", "P-2", "P-3"], 
     "Acc No": ['11234/57468/28576', '13245/13246', '46578/37264/35264'], 
     "Company": ["red", "yellow", "blue"]}
)
print(df)

输出:

ID                  Acc No Company
0  P-1  11234/57468/28576     red
1  P-2        13245/13246  yellow
2  P-3  46578/37264/35264    blue

你希望把Acc No列按/拆分后,每个拆分出的条目都对应原有的ID和Company数据,得到这样的目标结果:

df2 = pd.DataFrame(
    {"ID": ["P-1","P-1","P-1", "P-2","P-2", "P-3","P-3","P-3"], 
     "Acc No": ['11234','57468','28576', '13245','13246', '46578','37264','35264'], 
     "Company": ["red", "red","red","yellow", "yellow", "blue", "blue", "blue"]}
)
print(df2)

解决方案:用explode()轻松实现

这个需求其实用pandas的explode()方法就能完美解决,步骤非常简单:

  1. 先把Acc No列拆成列表:用str.split('/')将每个字符串按斜杠分割成列表,替换原列
  2. 用explode()展开列表:这个方法会自动把列表里的每个元素单独生成一行,同时保留其他列的对应值

完整代码如下:

import pandas as pd

df = pd.DataFrame(
    {"ID": ["P-1", "P-2", "P-3"], 
     "Acc No": ['11234/57468/28576', '13245/13246', '46578/37264/35264'], 
     "Company": ["red", "yellow", "blue"]}
)

# 1. 将Acc No列拆分为列表
df['Acc No'] = df['Acc No'].str.split('/')

# 2. 展开列表,生成目标DataFrame
df2 = df.explode('Acc No', ignore_index=True)

print(df2)

运行后你就能得到想要的输出:

ID Acc No Company
0  P-1  11234     red
1  P-1  57468     red
2  P-1  28576     red
3  P-2  13245  yellow
4  P-2  13246  yellow
5  P-3  46578    blue
6  P-3  37264    blue
7  P-3  35264    blue

补充:旧版本pandas的替代方法

如果你的pandas版本低于0.25(explode()是0.25版本新增的),可以用apply结合stack的方式实现:

df2 = df.set_index(['ID', 'Company'])['Acc No'].str.split('/', expand=True).stack().reset_index(name='Acc No').drop('level_2', axis=1)

不过还是推荐优先用explode(),代码更简洁易懂,维护起来也方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:43:13