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

如何在DataFrame每行的match列中提取并保留唯一值?

问题分析与解决方法

你的核心问题是没有先将逗号分隔的字符串拆分为元素列表,直接对字符串使用set会把每个字符(包括逗号)当成独立元素,自然得不到正确的去重结果。以下是两种能保留元素原始顺序的可行解法:

解法一:用dict.fromkeys实现有序去重

import pandas as pd

# 构造目标DataFrame
data = {
    'Ville': ['Paris', 'Rome'],
    'match': ['Talborjt,Talborjt,Ville Nouvelle', 'Hay Najah,Hay Najah,Najah']
}
all_quartiers = pd.DataFrame(data)

# 自定义去重函数:分割字符串→清理空格→有序去重→重新拼接
def get_unique_match(s):
    # 按逗号分割并去除每个元素前后的空格
    items = [item.strip() for item in s.split(',')]
    # 利用字典键的唯一性去重,同时保留元素原始顺序(Python3.7+字典默认有序)
    unique_items = list(dict.fromkeys(items))
    # 按目标格式拼接成字符串
    return ', '.join(unique_items)

# 生成contains列
all_quartiers['contains'] = all_quartiers['match'].apply(get_unique_match)
print(all_quartiers)

解法二:用itertools.groupby实现有序去重

如果偏好使用迭代工具,也可以用groupby去重:

import pandas as pd
from itertools import groupby

data = {
    'Ville': ['Paris', 'Rome'],
    'match': ['Talborjt,Talborjt,Ville Nouvelle', 'Hay Najah,Hay Najah,Najah']
}
all_quartiers = pd.DataFrame(data)

def get_unique_match(s):
    items = [item.strip() for item in s.split(',')]
    # 按连续重复的元素分组,提取每组的唯一值
    unique_items = [k for k, _ in groupby(items)]
    return ', '.join(unique_items)

all_quartiers['contains'] = all_quartiers['match'].apply(get_unique_match)

输出结果

Ville                               match                  contains
0  Paris  Talborjt,Talborjt,Ville Nouvelle  Talborjt, Ville Nouvelle
1   Rome       Hay Najah,Hay Najah,Najah         Hay Najah, Najah

错误代码说明

  • 前两行代码直接对字符串使用set,会将字符串拆分为单个字符(包括逗号),完全偏离了按元素去重的需求;
  • 第三行代码中explode需要match列为列表类型,而你的数据是字符串,运行会报错,且即便为列表,该代码会提取整个列的全局唯一值,而非每行的局部唯一值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:43:36