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
相关产品推荐
相关产品推荐

