python - 从基于另一个列表的列表列中删除列表值
问题描述
假设我有一个 DataFrame,其中一列是一列列表。我将如何删除那些列表中的所有元素,这些元素也在另一个指定列表中找到?原始列应保持完整,同时将新列添加到 DataFrame 中,并从每个行值中删除指定的列表元素。
df = pd.DataFrame({ 'Values': [['a', 'b', 'c'], ['a', 'b', 'c', 'd'], ['a', 'b'], ['c']]})
removal_list = ['a', 'b']
生成
Index Values
0 ['a', 'b', 'c']
1 ['a', 'b', 'c', 'd']
2 ['a', 'b']
3 ['c']
期望的输出是......
Index Values Cleaned_Values
0 ['a', 'b', 'c'] ['c']
1 ['a', 'b', 'c', 'd'] ['c', 'd']
2 ['a', 'b'] []
3 ['c'] ['c']
解决方案
理解
df.assign(Cleaned_Values=[[x for x in y if x not in removal_list] for y in df.Values])
Values Cleaned_Values
0 [a, b, c] [c]
1 [a, b, c, d] [c, d]
2 [a, b] []
3 [c] [c]
set
df.assign(Cleaned_Values=df.Values.map(set).sub({*removal_list}).map(list))
Values Cleaned_Values
0 [a, b, c] [c]
1 [a, b, c, d] [c, d]
2 [a, b] []
3 [c] [c]
同样的事情,但有点快,因为我们一起处理所有的转换。
df.assign(Cleaned_Values=df.Values.map(lambda x: [*{*x} - {*removal_list}]))
推荐阅读
- php - PHP 不工作;而是打印出代码
- android - 长按RecyclerView时让ImageView出现,释放时消失?
- php - 你仍然可以使用 PDO::quote() 被黑客入侵吗?
- angular - Angular 材质 mat-menu 多次复制内部组件
- javascript - 如何在php中回显ajax变量?
- node.js - 带有 vhost 和 greenlock-express 的 NodeJS 子域
- javascript - 进行多个快速 API 调用而不发送垃圾邮件的最有效方法?
- scala - Spark 结构化流中的 LocalTableScan 有什么用?
- python - 无法使用终端将本地 Python 文件复制到 HIVE
- swift - 让编辑按钮到我需要的地方