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,您可以尝试使用=
。有关更多信息,请查看此;