python - 在 Pandas 中替换列表类型列中的重复项
问题描述
背景信息:我有一个数据框df
,其中包含多个列,其中焦点是名为“流派”的列
目标:
可以在这张图片中看到问题,有些条目发现重复,例如“[戏剧,浪漫]”和“[浪漫,戏剧]”是同一件事
- 现在的目标是以编程方式删除/替换重复项,以便将变体替换为其等价形式。
例子:
“[戏剧,浪漫]”和“[浪漫,戏剧]”
现在 [Romance, Drama] 被 [Drama, Romance] 替换,反之亦然,而不是完全删除,我们只是替换列表的内容
输出 - 在替换重复的 '[Drama, Romance]' 和 '[Romance, Drama]' 之前
- 过滤
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
解决方案
假设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()
推荐阅读
- github - 是否可以从 github 问题中删除提交引用?
- agora.io - 如何在 agora.io 中获取所有活跃的流媒体?
- apache-spark - PySpark 过滤元素列表,然后合并回来
- reactjs - 如何将此功能从样式化组件包转换为常规 jsx
- javascript - 当鼠标悬停在使用 JQuery 的按钮上时如何显示文本?
- flutter - 如何在 Flutter 中将文件读取为数组缓冲区?
- ffmpeg - FFMPEG 脚本用于合并列表中的所有文件并制作 1920x1080p 60fps mp4 视频
- python - 线程代码由于某种原因没有给出输出(pynput)
- mysql - MYSQL select table by desc order limiting from last 10 rows
- memory-management - JNI 调用中的内存管理,出现内存不足错误