使用从Postgres

时间:2019-01-18 06:22:43

标签: python postgresql pandas dataframe

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数据名人堂上创建一个遵循上述逻辑的计算列。

谢谢!

1 个答案:

答案 0 :(得分:1)

首先使用减法创建新的系列s,然后使用numpy.wherewhere

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)