如何将Pandas的pipe、行级apply和query操作合并为单链式调用
错误原因
你的报错是因为混淆了assign和apply的调用逻辑:
assign方法中传入的lambda入参是完整的DataFrame对象,不是逐行传入的单行数据,你直接把整个DataFrame传给仅支持单行入参的function_3,就会触发Series真值判断的歧义错误assign本身不支持axis参数,你额外写的axis=1属于无效传参,也会引发运行异常
正确实现方式
你只需要在assign内部嵌套apply逐行处理即可,参考代码如下:
df1 = ( df .pipe(function_1) .pipe(function_2) .assign( prediction = lambda df_: df_.apply(lambda row: function_3(row, input_dict), axis=1) ) .query("prediction>0") )
代码说明
- 第一层lambda的入参
df_是经过前序pipe处理后的完整DataFrame,用df_命名是为了避免和外层的原始df变量重名冲突 - 内层调用
apply并指定axis=1,就可以逐行把单行数据传给function_3,返回的结果直接作为新列prediction的值
内容的提问来源于stack exchange,提问作者Alessandro Ceccarelli
相关产品推荐
相关产品推荐

