如何在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
相关产品推荐
相关产品推荐

