首页 > 解决方案 > 使用从 Postgres 提取的数据框在 Python 中创建计算列(带有 If 语句)

问题描述

相当新Python,我正在尝试DataFrame使用 If 函数创建一个计算列。

我尝试使用从 中直接引用的字段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 数据帧上创建一个遵循上述逻辑的计算列。

谢谢!

标签: pythonpostgresqlpandasdataframe

解决方案


首先使用减法创建新系列s,然后使用numpy.whereor 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)

推荐阅读