使用for循环创建几列?

时间:2020-01-02 21:02:48

标签: python python-3.x pandas dataframe for-loop

下面的代码(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)

1 个答案:

答案 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)