Pandas有没有办法从一个系列中删除重复的内容?

2024-06-26 00:01:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dataframe,它在“tags”列中有一些用逗号分隔的重复标记,有没有办法从序列中删除重复的字符串。我希望400年的产量只有博物馆,喝酒,购物。你知道吗

我不能用逗号拆分并删除它们,因为序列中有一些标签具有类似的单词,例如:[Museum,Art Museum,Shopping],因此拆分和删除多个博物馆字符串会影响唯一的“Art Museum”字符串。你知道吗

Desired Output


Tags: 字符串标记dataframetags序列标签购物单词
3条回答

您可以创建一个从给定字符串中删除重复项的函数。然后将此函数应用于列标记。你知道吗

def remove_dup(strng):
    '''
     Input a string and split them 
    '''
    return ', '.join(list(dict.fromkeys(strng.split(', '))))


df['Tags'] = df['Tags'].apply(lambda x: remove_dup(x))

演示:

import pandas as pd
my_dict = {'Tags':["Museum, Art Museum, Shopping, Museum",'Drink, Drink','Shop','Visit'],'Country':['USA','USA','USA', 'USA']}
df = pd.DataFrame(my_dict)
df['Tags'] = df['Tags'].apply(lambda x: remove_dup(x))
df

输出:

    Tags                          Country
0   Museum, Art Museum, Shopping    USA
1   Drink                           USA
2   Shop                            USA
3   Visit                           USA

在用str.strip()删除前导/尾随空格后,可以用逗号拆分并转换为set(),这样可以删除重复项。然后,您可以df.apply()将它添加到您的列中。你知道吗

df['Tags']=df['Tags'].apply(lambda x: ', '.join(set([y.strip() for y in x.split(',')])))

如果没有一些代码示例,我已经把一些可以工作的东西放在一起了。你知道吗

import pandas as pd
test = [['Museum', 'Art Museum', 'Shopping', "Museum"]]
df = pd.DataFrame()
df[0] = test
df[0]= df.applymap(set)
Out[35]: 
                                0
0  {Museum, Shopping, Art Museum}

相关问题 更多 >