【问题标题】:lambda function to check if value is in a list [duplicate]用于检查值是否在列表中的 lambda 函数
【发布时间】:2026-01-11 18:30:01
【问题描述】:

这是一个示例数据框:

id  lists
1   ['dog', 'apple']
2   ['apple', 'cat']
3   ['pig', 'love']
4   ['help', 'out']

现在,当apple 在列表列表中时,我想使用 lambda 函数创建另一列。

id  lists             flag
1   ['dog', 'apple']  1
2   ['apple', 'cat']  1
3   ['pig', 'love']   0
4   ['help', 'out']   0

我的第一个想法是使用以下代码,但出现语法错误:

df.apply(lambda x: [1 if "apple" in i for i in x])

【问题讨论】:

  • 如果苹果不在i中,值应该是多少?
  • @jonrsharpe 我猜是 0,来自 MWE。虽然这应该在问题中明确说明。
  • 您使 LC 复杂化,只需使用 df['lists'].apply(lambda x: 'apple' in x).astype(int)
  • @coldspeed 我的意思更多的是语法错误所问的问题。
  • 这里不推荐使用apply。如果您正在处理字符串或混合/可变数据类型,请改用列表推导。请参阅this post 了解更多信息。

标签: python pandas list-comprehension


【解决方案1】:

我认为您可以稍微修改您的代码并获得所需的结果,如下所示:

df["lists"].apply(lambda x: 1 if "apple" in x else 0)

如果苹果在列表中,则使用三元运算符返回 1,如果不在列表中则返回 0

或者正如@Vaishali 在 cmets 中提到的,您可以使用更简单的 lambda 并进行类型转换:

df["lists"].apply(lambda x: "apple" in x).astype(int)

这里的 lambda 返回一个布尔序列,然后在转换为整数时转换为 1 和 0

【讨论】: