如何在Python Pandas DataFrame中拆分列生成新行?
在Pandas中拆分DataFrame列并生成新行的最佳实现方法
针对你需要拆分SKU列、将多值行拆分为单独行的需求,最简洁高效的实现方式是结合str.split()和explode()方法,具体步骤如下:
1. 构造输入DataFrame
先把你提供的输入数据转换成Pandas DataFrame:
import pandas as pd df = pd.DataFrame({ 'SKU': ['YY-123-671', 'YY-345-111-WH,YY-345-111-RD,YY-345-111-BL', 'LK-896-001'], 'Quantity': [5, 10, 1], 'Name': ['抽屉', '书桌', '台灯'] })
2. 拆分并生成新行
核心代码一行搞定:
df = df.assign(SKU=df['SKU'].str.split(',')).explode('SKU', ignore_index=True)
str.split(','):将SKU列中用逗号分隔的字符串拆分为列表;assign():把拆分后的列表替换原SKU列;explode('SKU'):将列表中的每个元素单独拆成一行,同时自动复制对应行的Quantity和Name值;ignore_index=True:重置结果的索引,避免出现重复索引。
3. 验证结果
执行后得到的DataFrame完全符合你的期望输出:
| SKU | Quantity | Name |
|---|---|---|
| YY-123-671 | 5 | 抽屉 |
| YY-345-111-WH | 10 | 书桌 |
| YY-345-111-RD | 10 | 书桌 |
| YY-345-111-BL | 10 | 书桌 |
| LK-896-001 | 1 | 台灯 |
旧版本Pandas兼容方案
如果你的Pandas版本低于0.25(explode()是0.25版本新增的),可以用以下替代方法:
df = df.set_index(['Quantity', 'Name'])['SKU'].str.split(',', expand=True).stack().reset_index().rename(columns={0: 'SKU'}).drop('level_2', axis=1)
内容的提问来源于stack exchange,提问作者Defcon
相关产品推荐
相关产品推荐

