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

如何在Pandas DataFrame中拆分列并将原行复制为新行

解决Pandas DataFrame拆分列值并生成新行的问题

方法一:使用str.split + explode(推荐)

这是最简洁高效的实现方式,两步即可完成需求:

import pandas as pd

# 模拟你的输入数据
data = {
    'Order#': ['123', '456,789', '321', '121,651'],
    'Price': ['$20', '$50', '$45', '$76'],
    'Quantity': [5, 7, 3, 9]
}
df = pd.DataFrame(data)

# 1. 将Order#列的逗号分隔值拆分为列表格式
df['Order#'] = df['Order#'].str.split(',')
# 2. 展开列表中的每个元素为单独行,自动复制其他列的对应值
df = df.explode('Order#').reset_index(drop=True)

print(df)

输出结果:

Order# Price  Quantity
0    123  $20         5
1    456  $50         7
2    789  $50         7
3    321  $45         3
4    121  $76         9
5    651  $76         9

方法二:基于你尝试的expand=True实现

如果想延续你之前的思路,可通过以下步骤完成:

import pandas as pd

data = {
    'Order#': ['123', '456,789', '321', '121,651'],
    'Price': ['$20', '$50', '$45', '$76'],
    'Quantity': [5, 7, 3, 9]
}
df = pd.DataFrame(data)

# 1. 拆分Order#列为多列,expand=True会将拆分结果转为多列格式
split_cols = df['Order#'].str.split(',', expand=True)
# 2. 将拆分后的多列转为长格式,过滤空值并保留原始索引
split_long = split_cols.melt(var_name='temp', value_name='Order#').dropna(subset=['Order#'])
# 3. 合并原始数据的其他列与拆分后的Order#列,按索引匹配
result = pd.merge(df.drop('Order#', axis=1), split_long[['Order#']], left_index=True, right_index=True)
# 4. 重置索引避免混乱
result = result.reset_index(drop=True)

print(result)

核心逻辑说明

  • str.split(','):把单个逗号分隔的字符串拆分为列表,为后续行展开做准备
  • explode():Pandas专门用于将列表/数组类型列展开为多行的方法,自动复制当前行的其他列值到新行
  • melt():将宽格式的拆分结果转为长格式,适配expand=True生成的多列数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:22:24