问题描述
背景信息:我有一个数据框 df
,其中包含多个列,其中重点是名为“流派”的列
目标:
- 现在的目标是以编程方式删除/替换重复项,以便将变体替换为其等效形式,例如这样。
示例:
'[戏剧,浪漫]'和'[浪漫,戏剧]'
现在 [Romance,Drama] 替换为 [Drama,Romance],反之亦然,而不是完全删除,我们只是替换列表的内容
Output - Before Replacing Duplicates '[Drama,Drama]'
Expected Output - After Replacing Duplicates '[Drama,Romance]'
- 过滤
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
解决方法
假设列中每一行的数据类型为 list
:
-
您可以先使用
对每行列表进行排序sorted
-
然后用
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()