python - 列表的 boolean 掩码作为 Pandas 数据框中的条目

标签 python pandas dataframe boolean masking

我有一个包含列表作为条目的 pandas DataFrame

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

df = pd.DataFrame(data)

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

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

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

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

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

最佳答案

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

关于python - 列表的 boolean 掩码作为 Pandas 数据框中的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63381888/

相关文章:

Python:打印 protobuf 规范(字段、类型)

python - 如何在 Python 中使用正则表达式从 URL 中提取 slug?

python - 如何隐藏 geckodriver 控制台窗口?

python - 易于使用的 Python 加密库/包装器?

python - 如果表 beautifulsoup 和 pandas 中不存在类,则停止抓取 url

python - 根据形状对 numpy 数组列表进行分组。 Pandas ?

python - Pandas transform ('unique' ) 输出为逗号分隔字符串而不是列表

r - 按组和间隔坐标折叠 data.frame

python - Pandas 正则表达式从第一次出现的字符向前看和向后看

python - pandas 使用 $ 特殊文本样式分割字符串