下面的代码(N天的移动平均值计算)效果很好。但是我想用50替换其他数字(例如5、10、20等)。不确定是否可以将以下代码转换为for循环中的内容。有人可以帮我吗?
df['ma50pfret']= df['ret']
df.loc[df.adjp >= df.ma50, 'adjp > ma50']= 1
df.loc[df.adjp < df.ma50, 'adjp > ma50']= 0
df.iloc[0, -1]= 1
df['adjp > ma50']= df['adjp > ma50'].astype(int)
df.loc[df['adjp > ma50'].shift(1)== 0, 'ma50pfret']= 1.000079 # 1.02**(1/250)
df['cum_ma50pfret']=df['ma50pfret'].cumprod()
df.head(10)
答案 0 :(得分:0)
您是不是要用5、10、20等替换50?如果是这样,可以通过始终使用方括号来访问列,并使用f字符串(或其他字符串格式方法)将50替换为其他数字来实现,例如:
for num in [5, 10, 20, 50]:
df[f'ma{num}pfret']= df['ret']
df.loc[df.adjp >= df[f'ma{num}'], f'adjp > ma{num}']= 1
df.loc[df.adjp < df[f'ma{num}], f'adjp > ma{num}']= 0
df.iloc[0, -1]= 1
df[f'adjp > ma{num}']= df[f'adjp > ma{num}'].astype(int)
df.loc[df[f'adjp > ma{num}'].shift(1)== 0, f'ma{num}pfret']= 1.000079 # 1.02**(1/250)
df[f'cum_ma{num}pfret']=df[f'ma{num}pfret'].cumprod()
df.head(10)