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

pandas如何按details列中ID的数量拆分多行,为每个客户生成单独记录

实现方案
  • 核心逻辑:先用正则匹配提取details列中所有单条客户信息,生成列表;再通过pandas的explode方法将列表拆分为独立行,其余字段自动复用原行对应值。
import pandas as pd
import re

# 读取原始数据,此处为示例构造,可替换为你的数据读取逻辑比如pd.read_csv()
df = pd.DataFrame({
    'date': ['12/11', '13/11', '14/11'],
    'time': ['12:00', '13:00', '11:00'],
    'consumer': ['abc', 'def', 'ghj'],
    'details': [
        'ID:123, Qty: 1,Name: abcdef, ID: 324,Qty:2,Name: ghiefg,',
        'ID:123, Qty: 1,Name: abcdef,',
        'ID:123, Qty: 1,Name: abcdef, ID:123, Qty: 1,Name: abcdef,'
    ]
})

# 正则匹配单条客户信息规则,适配ID、Qty、Name前后的空格差异
pattern = r'ID:\s*\d+\s*,?\s*Qty:\s*\d+\s*,?\s*Name:\s*[^,]+,?'
# 提取每条details中的所有单条客户信息,生成列表
df['details'] = df['details'].apply(lambda x: re.findall(pattern, x))
# 拆分列表为独立行
df = df.explode('details', ignore_index=True)
# 可选:清理details首尾空格、末尾多余逗号
df['details'] = df['details'].str.strip().str.rstrip(',')

运行后输出的df即为所需结果。

注:你给出的期望输出中14/11最后一行consumer为hgf属于笔误,按原始数据逻辑拆分后该行consumer值和原行一致为ghj,若有特殊修改需求可单独调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:48:03