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

Pandas DataFrame拆分产品字段至新行,保留关联收据编号

嘿,我懂你现在的困扰——把一条对应多个产品的收据记录拆成单独行,还得保留对应的收据编号,这个操作说起来简单,但实际写代码的时候很容易踩坑。我给你两种常见的解决思路,不管你用不用数据分析工具都能搞定:

方法一:用Pandas快速处理(适合大量数据)

如果你的数据量比较大,用Pandas来处理效率会很高,而且代码很简洁:

首先模拟你的原始数据(你可以直接替换成自己的数据源):

import pandas as pd

# 模拟原始销售数据
data = {
    '收据编号': ['A', 'B', 'C'],
    '产品信息': ['L,Q', 'M', 'N,P,R']
}
df = pd.DataFrame(data)

然后执行拆分和展开操作,核心用str.split()把产品字符串拆成列表,再用explode()把列表里的每个元素拆成单独行:

# 把产品信息按分隔符拆成列表
df['产品信息'] = df['产品信息'].str.split(',')
# 展开列表为单独行,同时重置索引
df = df.explode('产品信息', ignore_index=True)

执行完后,你就能得到想要的结果:

收据编号 产品信息
0     A     L
1     A     Q
2     B     M
3     C     N
4     C     P
5     C     R

额外处理技巧

  • 如果你的产品信息分隔符不是逗号,把str.split(',')里的逗号换成实际分隔符就行(比如分号;)
  • 如果产品信息里带空格(比如"L , Q"),可以加一行去掉空格:df['产品信息'] = df['产品信息'].str.strip()
  • 如果有产品信息为空的行,提前过滤掉:df = df[df['产品信息'].notna()]
方法二:纯Python列表处理(适合小批量数据)

如果不想用第三方库,用基础的Python循环也能实现:

# 模拟原始数据列表
original_records = [
    {'收据编号': 'A', '产品信息': 'L,Q'},
    {'收据编号': 'B', '产品信息': 'M'},
    {'收据编号': 'C', '产品信息': 'N,P,R'}
]

# 用来存储拆分后的新记录
new_records = []

for record in original_records:
    # 拆分产品信息为单个产品
    products = record['产品信息'].split(',')
    # 给每个产品生成一条新记录
    for product in products:
        new_records.append({
            '收据编号': record['收据编号'],
            '产品信息': product.strip()  # 去除产品名前后的空格
        })

# 打印拆分后的结果
for item in new_records:
    print(item)

运行后会输出:

{'收据编号': 'A', '产品信息': 'L'}
{'收据编号': 'A', '产品信息': 'Q'}
{'收据编号': 'B', '产品信息': 'M'}
{'收据编号': 'C', '产品信息': 'N'}
{'收据编号': 'C', '产品信息': 'P'}
{'收据编号': 'C', '产品信息': 'R'}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:05:48