提问者:小点点

将if/else逻辑应用于函数中的dataframe:valueError:序列的真值不明确


我想在一个基于if/then逻辑的数据框架中创建一个新列。 实际问题的规则是非常复杂的购物车树的输出。 我遇到的问题是,当我尝试将函数应用到数据帧时,会出现错误:

ValueError:序列的真值不明确。 使用a.empty,a.bool(),a.item(),a.any()或a.all()。

我很确定这是因为“if”逻辑试图将输入作为一个序列来计算,而不是逐行计算。 我就是想不出解决办法。

要复制:

import pandas as pd
import numpy as np
np.random.seed(1)

#create sample dataframe
df_test = pd.DataFrame({"llflag": np.random.normal(0,1,100)})

#sample if/else logic
def tree1(df):
  if df['llflag'] <= 0.5:
      return 4
  else:  
      return 3
  return 

#attempt to apply function to df
df_test['testRR'] = df_test.apply(tree1(df_test ), axis = 1)

我得到了同样的结果。

df_test['testRR'] = df_test.apply(lambda  x: tree1( df_test), axis = 1)'''

我错过了什么? 提前谢谢你。


共2个答案

匿名用户

您希望应用每一行的函数,而不是应用DF_TEST上计算的函数(失败),因此删除括号:

df_test['testRR'] = df_test.apply(tree1, axis = 1)

也试图阻止使用apply,因此这里有一个不同的更快版本:

df_test['testRR'] = np.where(df_test['llflag'] <= 0.5, 4, 3)

匿名用户

删除(df_test)

df_test['testRR'] = df_test.apply(tree1(df_test ), axis = 1)

这将对每一行应用函数