开发者社区> 问答> 正文

ambda函数检查值是否在列表中

这是一个示例Dataframe:

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])

展开
收起
一码平川MACHEL 2019-01-23 16:13:39 3105 0
2 条回答
写回答
取消 提交回答
  • df.apply(lambda x: [1 if "apple" in i for i in x])
    语法错误的原因是少了 else语句
    语法正确的写法应该是:
    df.apply(lambda x: [1 if "apple" in i else 0 for i in x])
    但是这样写也是不符合你的语意的

    可以参考上面答案或着如下
    [ 1 if "apple" in i else 0 for i in df['lists'] ]

    2019-07-17 23:26:42
    赞同 展开评论 打赏
  • 可以稍微修改您的代码并获得所需的结果,如下所示:

    df["lists"].apply(lambda x: 1 if "apple" in x else 0)
    如果apple在列表中,则使用三元运算符返回1,如果不在,则使用0返回0

    或者可以使用更简单的lambda并进行类型转换:

    df["lists"].apply(lambda x: "apple" in x).astype(int)
    这里的lambda返回一个布尔系列,然后在转换为整数时转换为1和0

    2019-07-17 23:26:42
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载