Python
的新手,我正在尝试使用If函数在DataFrame
上创建一个计算列。
我尝试使用直接从DataFrame
引用的字段,并将它们分配给变量并将其转换为序列(如下面的代码所示):
f4 =(使用pscyopg2和SQL查询从我的Postgres数据库中提取数据框)(379、7)
n = f4['id']
wv = f4['watermark_value']
anet = f4['a_net_revenue']
bnet = f4['b_net_revenue']
def adj_calc():
return anet-bnet-wv if bnet-wv<0 else bnet-wv
f4['watermark_adj'] = adj_calc()
我收到以下错误: “ ValueError:系列的真值不明确。请使用a.empty,a.bool(),a.item(),a.any()或a.all()。”
通过我的研究,我发现尝试直接从DataFrame
进行计算时,您可能会遇到熊猫问题,但是我很难找到解决方案或有关哪种数据类型的信息我应该改用。
基本上,我正在尝试在f4数据名人堂上创建一个遵循上述逻辑的计算列。
谢谢!
答案 0 :(得分:1)
首先使用减法创建新的系列s
,然后使用numpy.where
或where
:
s = bnet-wv
f4['watermark_adj'] = np.where(s<0, anet-s, s)
或者:
s = bnet-wv
f4['watermark_adj'] = s.where(s<0, anet-s)