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

如何基于多条件拆分DataFrame列并生成对应ID与描述字段

解决方案

方法1:拆分为单行单条记录(推荐,方便后续分析)

这种方法会把同一行的多个CPV条目拆分为独立行,保留原有其他列的所有信息,适合绝大多数后续分析场景。

import pandas as pd

# 假设你的原始DataFrame叫df
# 1. 按|拆分多值条目,展开为多行
df_exploded = df.assign(cpv=df['cpv'].str.split(r'\s*\|\s*')).explode('cpv', ignore_index=False)
# 2. 拆分ID和描述,n=1保证描述中出现的-不会被误拆分
df_exploded[['cpvid', 'cpvdescription']] = df_exploded['cpv'].str.split(r'\s+-\s+', n=1, expand=True)
# 3. 可选:删除原cpv列
df_final = df_exploded.drop(columns='cpv')

参数说明:

  • 拆分|的正则\s*\|\s*:自动忽略分隔符前后的多余空格,避免拆分后字符串首尾带空格
  • str.split的*n=1*参数:仅拆分第一个匹配到的-,避免描述内容中存在-时被误拆分
  • explode的*ignore_index=False*参数:保留原始行的索引,方便你回溯原始数据行,不需要可以改为True重置索引

注意:如果原始cpv列存在空值,可以先执行df = df.dropna(subset=['cpv'])过滤空行,避免拆分时出现异常。

方法2:保留原始行结构,ID和描述存储为列表

如果不需要拆分行为多行,希望每行还是对应原始的一条数据,可以用提取+分组聚合的方式:

# 提取所有cpvid和cpvdescription,按原始行索引分组聚合为列表
extract_df = df['cpv'].str.extractall(r'(?P<cpvid>[\d-]+)\s+-\s+(?P<cpvdescription>[^|]+)')
extract_df['cpvdescription'] = extract_df['cpvdescription'].str.strip()
# 按原始行索引聚合,合并到原DataFrame
df[['cpvid', 'cpvdescription']] = extract_df.groupby(level=0).agg(list)

这种方式得到的cpvid和cpvdescription都是列表格式,对应原始行中所有的ID和描述。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:54:03