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

如何在Pandas DataFrame指定索引的单元格中提取唯一值

解决DataFrame特定行单元格内重复值提取问题

我懂你遇到的困扰啦——drop_duplicates和nunique都是针对整行/整列的重复项处理,没法直接搞定单个单元格里用逗号分隔的重复值。咱们可以通过自定义一个处理函数,专门对目标行的每个单元格做拆分、去重、合并操作,完美解决这个需求。

步骤1:重现你的DataFrame

先把原始数据和DataFrame创建代码放出来,方便后续操作:

import pandas as pd

data = {
    'name': ['Jason , Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
    'year': ['2012 , 2012 , 2016 , 2016', 2012, 2013, 2014, 2014],
    'reports': ['4 , 4 , 5 , 6 , 6 , 7', 24, 31, 2, 3]
}
df1 = pd.DataFrame(data, index=['Cochice', 'Pima', 'Santa Cruz', 'Maricopa', 'Yuma'])

步骤2:自定义单元格处理函数

这个函数会判断单元格内容的类型:如果是带逗号的字符串,就拆分、去重(顺便去掉元素前后的空格),最后合并成干净的字符串;如果是数字就直接转成字符串保持原样:

def clean_duplicates_in_cell(value):
    if isinstance(value, str):
        # 拆分字符串,去除每个元素的空格,转集合去重,排序让结果更整齐
        unique_items = sorted(set(item.strip() for item in value.split(',')))
        return ','.join(unique_items)
    # 非字符串类型(比如数字)直接转字符串返回
    return str(value)

步骤3:应用函数到目标行

只需要对索引为Cochice的行应用这个函数,其他行保持不变:

df1.loc['Cochice'] = df1.loc['Cochice'].apply(clean_duplicates_in_cell)

最终结果

运行后你就能得到期望的输出:

name  reports      year
Cochice    Jason  4,5,6,7  2012,2016
Pima       Molly       24       2012
Santa Cruz Tina        31       2013
Maricopa   Jake         2       2014
Yuma       Amy          3       2014

这个方法不管你的DataFrame有多少列都能适用,只需要针对目标行处理就好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:09:57