Pandas 对dataframe中的多列执行计算并创建新列

Pandas 对dataframe中的多列执行计算并创建新列,pandas,dataframe,concatenation,Pandas,Dataframe,Concatenation,我正试图根据pandasdataframe中的条目执行计算。数据帧的外观如下所示: 它包含1466行。稍后,我将不得不在更多行的其他dfs上运行类似的计算 我想做的是,计算一些像mag='(U-V)/('R-I)(但忽略-999的任何值),将其放入一个新列,然后z_pred=10**((mag-c)m)放入一个新列(mag,c和m只是硬编码变量)。我还需要添加其他列,但我想这只是同一方法的扩展 我从尝试开始 for i in range(1): current = qso[:]

我正试图根据
pandas
dataframe中的条目执行计算。数据帧的外观如下所示: 它包含1466行。稍后,我将不得不在更多行的其他
df
s上运行类似的计算

我想做的是,计算一些像
mag
=
'(U-V)/('R-I)
(但忽略-999的任何值),将其放入一个新列,然后
z_pred
=
10**((mag-c)m)
放入一个新列(
mag
c
m
只是硬编码变量)。我还需要添加其他列,但我想这只是同一方法的扩展

我从尝试开始

for i in range(1):
    current = qso[:]
    mag = (U-V)/(R-I)
    name = current['NED']
    z_pred = 10**((mag - c)/m)
    z_meas = current['z']
但是我得到了一系列的
z
,我无法对其进行操作,或者在我试图打印值或将其写入文件时出现了各种类型的错误

我发现这给了我一个开始,但我不知道如何将它应用到多重计算中,就像我的情况一样


如何实现这一点?

有条件地按行添加计算列通常使用
numpy
np.where

df['mag'] = np.where(~df[['U', 'V', 'R', 'I']].eq(-999).any(1), (df.U - df.V) / (df.R - df.I), -999)

注;这里假设当任何列包含“-999”时,将不计算该列,并返回“-999”。

如果答案有帮助,请接受,并且upvoteI已接受此答案,但我有一些后续问题。我明天寄。好的,谢谢。顺便说一句,你也投了赞成票吗?是的,我今天早上在尝试了你的解决方案后投了赞成票。我没有将其列为公认答案的原因是我提到的那些后续问题。啊,好吧,你最好在另一个问题中发布它们,想想
.eq(-999)的含义。你答案中的表达式中有(1)
吗?我猜
.eq(-999)
的意思是
==-999
。这里是does,您可以尝试使用
=
。有关更多信息,请查看此;