列表的布尔掩码,作为pandas数据框中的条目

问题描述

我有一个熊猫DataFrame,其中包含列表作为条目

df[df['col1'] == 'foo']

然后,我想使用布尔型掩码返回行,如果'foo'在任何行的列表中(在本例中为第0行)。以下将返回一个空的DataFrame:

df[df['col1'].apply(lambda x: True if 'foo' in x else False)]

实现上述目标的最佳方法如下:

this.itemsList = this.itemsRefList.snapshotChanges().pipe(
  map(changes =>
    changes.map(c => ({
      product: c.payload.key,firmware: c.payload.child('latest').val(),ref: c.payload.ref,})
    )
  )
);

但是我觉得有一种方法可以简化这段代码。有什么建议吗?

解决方法

正如Henry在评论中所发布的,如果您在lambda中使用'foo' in x,则可以缩小代码。 对我来说,这看起来足够pythonic。

完整的行将是

df[df["col1"].apply(lambda x: 'foo' in x)]

如果要避免使用lambda表达式,可以使用:

def inside(my_list,key): return key in my_list
out = df[df["col1"].apply(inside,key="foo")]

这使用了预先定义的功能,可以对其进行扩展。对于lambda表达式,这是不可能的。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...