这是一个示例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])
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'] ]
可以稍微修改您的代码并获得所需的结果,如下所示:
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。