首页 > 解决方案 > 在 Pandas 中替换列表类型列中的重复项

问题描述

背景信息:我有一个数据框df,其中包含多个列,其中焦点是名为“流派”的列

目标:

可以在这张图片中看到问题,有些条目发现重复,例如“[戏剧,浪漫]”和“[浪漫,戏剧]”是同一件事

  1. 现在的目标是以编程方式删除/替换重复项,以便将变体替换为其等价形式。

例子:

“[戏剧,浪漫]”和“[浪漫,戏剧]”

现在 [Romance, Drama] 被 [Drama, Romance] 替换,反之亦然,而不是完全删除,我们只是替换列表的内容

输出 - 在替换重复的 '[Drama, Romance]' 和 '[Romance, Drama]' 之前

预期输出 - 替换重复的“[戏剧,浪漫]”后

  1. 过滤df列“流派”以仅包含列表条目不超过 3 个流派的流派,例如删除任何超过 3 个流派的行。“流派”列中可接受的结果示例:

我尝试了以下方法:

#to delist the 'genres' column
df['genres'] = df.genres.apply(', '.join)

# code sample of manually replaced duplicated content in genres column
df['genres'] = df['genres'].str.replace("Romance, Drama","Drama, Romance")
df['genres'] = df['genres'].str.replace("Drama, Comedy","Comedy, Drama")

上面的代码有效,但它是针对单个重复项手动完成的,所以我想找到一种方法来为在 'genres' 列中找到的所有重复项进行编码df

标签: pythonpandaslisteda

解决方案


假设list列中每一行的数据类型:

  1. 您可以首先对每行的列表进行排序sorted

  2. 然后过滤数据框的行loc并获得value_counts()

    df['genres'] = df['genres'].apply(lambda x: sorted(x))
    df.loc[df['genres'].apply(lambda x: len(x) <= 3), 'genres'].value_counts() 
    

推荐阅读