[英]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.