假设我有一个DataFrame DF

     0    1
0  ABC  DEF
1  abc  def

和一份名单

['ABC', 'DEF', 'abc']

我想判断df的所有条目是否也都在ls中.如果没有,我希望打印出任何未包含的元素.在这种情况下,代码应该打印‘def’.

(编辑:为了澄清,我想要cell中的value,其中条件为真.大多数常见的用例,通常涉及df.loc,只查看条件为真的row or column.但是,由于通常不清楚行/列的哪些单元格满足条件,因此这些并不能很好地解决我的问题.

我想到了这个:

tmp = df.loc[(~df.isin(ls)).any(), :].iloc[0, :]
print(tmp.loc[~tmp.isin(ls)].iloc[0])

因为这是我的代码应该做的最后一件事,所以我也可以这样做:

df.applymap(lambda s: exit(s) if s not in ls else None)

但它真的很难看.有没有更优雅的解决方案?

推荐答案

有几个选项,如果你只想要ls中没有的项目,你可以stack并过滤:

ls = ['ABC', 'DEF', 'abc']

out = df.stack().loc[lambda x: ~x.isin(ls)].tolist()

输出:['def']

或者使用set的差异:

out = set(df.stack()).difference(ls)

输出:{'def'}

Python相关问答推荐

aiohTTP与pytest的奇怪行为

在IIS中运行的FastAPI-获取权限错误:[Win错误10013]试图以其访问权限禁止的方式访问插槽

Python 枕头上的图像背景变黑

不同数据类型的Python成员变量不会在具有相同优先级的不同线程中更新

将C struct 的指针传递给Python中的ioctel

已删除的构造函数调用另一个构造函数

在Python中管理多个OpenGVBO和VAO实例

使用matplotlib pcolormesh,如何停止从一行绘制的磁贴连接到上下行?

使文本输入中的文本与标签中的文本相同

拆分pandas列并创建包含这些拆分值计数的新列

有条件地采样我的大型DF的最有效方法

在函数内部使用eval(),将函数的输入作为字符串的一部分

通过优化空间在Python中的饼图中添加标签

梯度下降:简化要素集的运行时间比原始要素集长

所有列的滚动标准差,忽略NaN

pandas:排序多级列

剪切间隔以添加特定日期

如何检测鼠标/键盘的空闲时间,而不是其他输入设备?

交替字符串位置的正则表达式

为什么在FastAPI中创建与数据库的连接时需要使用生成器?