np.where()具有多个输出

时间:2019-07-29 18:48:15

标签: python pandas numpy

我目前正在使用@Filter1IDAnd (@Filter1ID = '' Or Exists( Select 1 From s2_FieldValue fv Join s2_Field f On f.FieldID = fv.FieldID Where fv.DocumentID = s.DocumentID And fv.FieldID = @Filter1ID And ( (f.FieldTypeID in (0, 5/*فیلد محاسباتی*/) And fv.[Value] = @Filter1Value) Or (f.FieldTypeID = 3 And Cast(fv.[FieldOptionID] as nvarchar(max)) = @Filter1Value) Or (f.FieldTypeID in(1,2,4)) ) )) 进行逐行计算,其中pd.DataFrame的有效用法如下:

df.apply(foo)

这似乎是要简化为foo

我还有其他情况,只有一个def foo(row): n = row['A'] d = row['B'] if n <= 0: return 0 if d <= 0: return 100 return n / d * 100 语句(即np.where),我已经将其简化为

if

但是,我看不到如何使用double-if情况。至少不是优雅。我能做

if n <= 0

但这似乎遍历整个数据帧两次,每次np.where(df['A'] <= 0, 0, df['A'] / df['B']) 调用一次。

有没有更好的做事方法?或者,或者,np.where(df['A'] <= 0, 0, np.where(df['B'] <= 0, 100, n / d * 100)) 的使用和它带来的矢量化功能是如此之好,以至于np.where在表中运行两次仍然比np.where仅运行一次更好?

0 个答案:

没有答案