pandas按Code分组后多行字符串拼接拆分取唯一值实现问题
问题分析
- 原代码错误点:
- 自定义函数返回值为numpy数组,pandas的
transform无法直接将数组广播到分组内的所有行 - 没有预处理原始
Value字段的多余引号、前后空格,会拆分出空字符串、带引号的无效单词 - 没有将去重后的单词集合转为要求的
'a','b','c'格式字符串
- 自定义函数返回值为numpy数组,pandas的
正确实现代码
先构造测试数据可直接复现效果:
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和预期效果一致:
| Code | Value |
|---|---|
| 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
相关产品推荐
相关产品推荐

