我目前正在使用@Filter1ID
对And (@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
仅运行一次更好?