[英]python for loop as elif statement in function
我試圖在循環通過列表中的值的函數內插入for循環。
考慮我有以下數據框:
import pandas as pd
df = pd.DataFrame()
df['A'] = (53.104898, 52.032832, 48.705107, 43.150132, 42.09353, 42.32076, 41.620527, 44.479339, 44.673272, 43.811447, 44.273042, 47.384234, 49.210512, 50.330492 ,48.808856, 49.543268, 43.460175, 41.54373, 49.618678, 44.988629, 52.964725,
56.358917, 53.366254)
df['B'] = (2.157,2.0826,0.8452,-0.3046,-0.3436,-0.3906,-1.1528,-0.9462,-1.1314,-0.9994,-1.0538,0.785,1.5334,0.1424, 0.764,-0.6844,-2.5798,-2.3644,-1.97,-3.7466,-1.862,-0.248, -0.456)
def func():
q = [40,60]
def valuation_formula(x, y):
for i in q:
if x > 3.9:
return 'SIT'
elif x < -3.8:
return 'SIT'
elif x > 0.00 and y > i:
return 'BUY'
elif x < 0.00 and y < 41.14:
return 'SELL'
else:
return 'SIT'
df['C'] = df.apply(lambda row: valuation_formula(row['A'], row['B']), axis=1)
print(df)
i=i+1
func()
實際結果應為2個單獨的數據幀。 1個數據幀,使用列表q中的40作為i,第二個數據幀使用60
如注釋中所述,循環內的return
將終止所有操作,因此您只會查看q
的第一個值。 另外,您正在for i in q
和i+=1
混合...
無論如何,一個快速的解決方法是:
q = [40,60]
def valuation_formula(i, x, y):
# pass the i as a parameter
if x > 3.9:
return 'SIT'
elif x < -3.8:
return 'SIT'
elif x > 0.00 and y > i:
return 'BUY'
elif x < 0.00 and y < 41.14:
return 'SELL'
else:
return 'SIT'
# loop here
for i in q:
df['C'] = df.apply(lambda row: valuation_formula(i, row['A'], row['B']), axis=1)
print(df)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.