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

Python 数据框中作为条目的列表的布尔掩码,python,pandas,dataframe,boolean,masking,Python,Pandas,Dataframe,Boolean,Masking,我有一个包含列表作为条目的数据框架 data = {'col1': [ ['foo', 'bar', 'baz'], ['cat', 'dog', 'horse'], [1, 2, 3] ]} df = pd.DataFrame(data) 然后,如果“foo”在任何行的列表中(在本例中为第0行),我希望使用布尔掩码返回行。以下内容将返回一个空数据帧: df[df['col1'] == 'foo'] 实现上述目标的最佳方法如下: df[df['col1'].apply(lambda x

我有一个包含列表作为条目的数据框架

data = {'col1': [
['foo', 'bar', 'baz'], 
['cat', 'dog', 'horse'], 
[1, 2, 3]
]}

df = pd.DataFrame(data)
然后,如果“foo”在任何行的列表中(在本例中为第0行),我希望使用布尔掩码返回行。以下内容将返回一个空数据帧:

df[df['col1'] == 'foo']
实现上述目标的最佳方法如下:

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

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

正如Henry已经在评论中发布的那样,如果您在lambda内部的x中使用
'foo',您可以缩减代码。
对我来说,这看起来很像蟒蛇

完整的线路将是

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表达式中是不可能的。

是的,在x中使用
lambda x:“foo”。啊,是的,谢谢。当我意识到这不是我想要解决的问题时,我实际上要修改这个问题。