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

pandas按Code分组后多行字符串拼接拆分取唯一值实现问题

问题分析
  • 原代码错误点:
    • 自定义函数返回值为numpy数组,pandas的transform无法直接将数组广播到分组内的所有行
    • 没有预处理原始Value字段的多余引号、前后空格,会拆分出空字符串、带引号的无效单词
    • 没有将去重后的单词集合转为要求的'a','b','c'格式字符串
正确实现代码

先构造测试数据可直接复现效果:

import pandas as pd

# 构造测试数据集
data = {
    'Code': [124, 235, 124, 236, 235, 124],
    'Value': ['"grey box"', '"yellow candle"', '"large box"', '" blue suitcase"', '"fancy candle"', '" large box"']
}
df = pd.DataFrame(data)

核心处理逻辑:

# 预处理:清理Value字段的引号、前后多余空格
df['Value'] = df['Value'].str.strip('" ').str.strip()

def get_unique_words(series):
    # 拆分所有字符串、展平、按出现顺序去重,需要按字母序可替换为sorted(set(series.str.split().explode().dropna()))
    words = list(dict.fromkeys(series.str.split().explode().dropna()))
    # 转为要求的带单引号、逗号分隔的字符串格式
    return ",".join([f"'{w}'" for w in words])

# 分组计算后把结果映射回原数据的每一行
df['Value'] = df.groupby('Code')['Value'].transform(get_unique_words)
输出结果

处理后df和预期效果一致:

CodeValue
124'grey','box','large'
235'yellow','candle','fancy'
124'grey','box','large'
236'blue','suitcase'
235'yellow','candle','fancy'
124'grey','box','large'

如果需要调整单词的展示顺序,在get_unique_words函数中对words列表做自定义排序即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:18:02