我想在一个基于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)'''
我错过了什么? 提前谢谢你。
您希望应用
每一行的函数,而不是应用
在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)
这将对每一行应用函数