我有这个循环来检查以下条件。对于i的每一次迭代,都需要为m1, m2, m3, m4 and m5获取一个值。是否需要像这样检查if语句(由“对”检查),还是有更聪明/更快的方法进行检查?
for i in range(len(df.index)):
if df.ix[i, 'ema4'] >= df.ix[i, 'ema9']:
m1 = 1
elif df.ix[i, 'ema4'] < df.ix[i, 'ema9']:
m1 = -1
if df.ix[i, 'ema9'] >= df.ix[i, 'ema20']:
m2 = 1
elif df.ix[i, 'ema9'] < df.ix[i, 'ema20']:
m2 = -1
if df.ix[i, 'ema20'] >= df.ix[i, 'ema48']:
m3 = 1
elif df.ix[i, 'ema20'] < df.ix[i, 'ema48']:
m3 = -1
if df.ix[i, 'ema48'] >= df.ix[i, 'ema80']:
m4 = 1
elif df.ix[i, 'ema48'] < df.ix[i, 'ema80']:
m4 = -1
if df.ix[i, 'ema80'] >= df.ix[i, 'ema100']:
m5 = 1
elif df.ix[i, 'ema80'] < df.ix[i, 'ema100']:
m5 = -1
df.ix[i,'test'] = (m1 + m2 + m3 + m4 + m5) 发布于 2015-12-03 14:34:32
为了简化代码,您可以将变量初始化为默认值,并使用一组if:
m1 = m2 = m3 = m4 = m5 = -1
for i in range(len(df.index)):
if df.ix[i, 'ema4'] >= df.ix[i, 'ema9']:
m1 = 1
...发布于 2015-12-03 14:48:05
您可以使用两个循环,一个是@eugene y提到的,对列表稍微做了修改,另一个是列:
df_size = len(df.index)
m = [-1] * df_size
col_names = ['ema4', 'ema9', 'ema20', 'ema48', 'ema80']
for i in range(df_size ):
for col_name in col_names:
if df.ix[i, col_name] >= df.ix[i, col_name ]:
m[i] = 1
df.ix[i,'test'] = sum(m)发布于 2015-12-03 14:35:25
就像评论说的,只需使用其他:
for i in range(len(df.index)):
if df.ix[i, 'ema4'] >= df.ix[i, 'ema9']:
m1 = 1
else:
m1 = -1或者你可以预置并只做以下操作:
m1 = -1
if df.ix[i, 'ema4'] >= df.ix[i, 'ema9']:
m1 = 1对所有的ifs重复
https://stackoverflow.com/questions/34068568
复制相似问题