Python 替换Pandas中列表类型列中的重复项

Python 替换Pandas中列表类型列中的重复项,python,pandas,list,eda,Python,Pandas,List,Eda,背景信息:我有一个数据框df,它有不同的列,其中的焦点是名为“流派”的列 目标: 现在,我们的目标是以编程方式删除/替换重复项,以使变体替换为其等效形式,如下面所示 例如: “[戏剧,浪漫]”和“[浪漫,戏剧]” 现在[浪漫,戏剧]被[戏剧,浪漫]替换,反之亦然,而不是完全删除,我们只是替换列表的内容 过滤df列“流派”,仅包括列表项不超过3种流派的流派,例如删除任何超过3种流派的行。“类型”列中可接受结果的示例: [浪漫、戏剧、喜剧] [浪漫、戏剧] [戏剧] 我尝试了以下方法:

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

目标:

  • 现在,我们的目标是以编程方式删除/替换重复项,以使变体替换为其等效形式,如下面所示
  • 例如:

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

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

  • 过滤
    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")
    

    上面的代码可以工作,但它是针对单个重复项手动完成的,因此我想找到一种方法来为
    df

    的“流派”列中找到的所有重复项进行编码,假设列中的每一行都有
    列表
    数据类型:

  • 您可以首先使用排序的
    sorted

  • 然后使用
    loc
    过滤数据帧的行,并获得
    值\u counts()

    df['genres']=df['genres'].apply(lambda x:sorted(x))
    
    df.loc[df['genres'].apply(lambda x:len(x)假设
    list
    列中每一行的数据类型:

  • 您可以首先使用排序的
    sorted

  • 然后使用
    loc
    过滤数据帧的行,并获得
    值\u counts()

    df['genres']=df['genres'].apply(lambda x:sorted(x))
    
    df.loc[df['genres'].apply(lambda x:len(x)对数据帧中的列表进行排序,并使用字符串连接,然后比较不同的值。
    df['genres'].map(lambda x:','.join(sorted(x)))
    @codemunchkin将来请不要发布图片。请查看如何在此处创建一个最小的可复制示例:此外,可能还有其他一两个答案,因此请在有人为您解决问题时接受。请查看此处如何接受解决方案:谢谢!在数据框中对列表排序,并使用字符串连接,然后比较diffence.
    df['genres'].map(lambda x:','.join(sorted(x)))
    @codemunchkin以后请不要发布图片。请查看如何在此处创建一个可复制的最小示例:此外,可能还有其他一两个答案,因此请在有人为您解决问题时接受。请查看此处如何接受解决方案:谢谢!第一行代码有效!但第二行代码给出了错误读数“'DataFrame'对象没有属性'value\u counts'”@codemunchkin try now第一行代码有效!但第二行代码出现错误,读取“'DataFrame'对象没有属性'value\u counts'”@codemunchkin try now
    df['genres'] = df['genres'].apply(lambda x: sorted(x))
    df.loc[df['genres'].apply(lambda x: len(x) <= 3), 'genres'].value_counts()