【问题标题】:How to loop keeping a value constant while condition remains True如何在条件保持为真时循环保持值不变
【发布时间】:2016-03-03 14:14:01
【问题描述】:

规则是:

如果Regime = 0 => Position = 0
如果Regime = 1 => Position = Size
如果Regime = -1=> Position = -Size

一旦Position 取一个值,我想保持该值不变,而Re 保持为1-1

任何想法如何保持Position 值不变直到Re 发生变化?

我的数据框:

    Dates()  Close  Re  Size
0  12/29/10  86.76   0  2073
1  12/30/10  86.54   1  2209
2  12/31/10  86.30   1  2339
3  08/09/11  82.69   0   984
4  08/10/11  78.23   0   880
5  09/02/11  79.34  -1  1015
6  09/06/11  78.08  -1  1002

【问题讨论】:

    标签: python pandas dataframe algorithmic-trading


    【解决方案1】:

    你可以使用loc:

    print df
        Dates()  Close  Re  Size
    0  12/29/10  86.76   0  2073
    1  12/30/10  86.54   1  2209
    2  12/31/10  86.30   1  2339
    3  08/09/11  82.69   0   984
    4  08/10/11  78.23   0   880
    5  09/02/11  79.34  -1  1015
    6  09/06/11  78.08  -1  1002
    
    df.loc[df['Re']==0, 'Position'] = 0
    df.loc[df['Re']==1, 'Position'] = df['Size']
    df.loc[df['Re']==-1, 'Position'] = -df['Size']
    
    print df
        Dates()  Close  Re  Size  Position
    0  12/29/10  86.76   0  2073         0
    1  12/30/10  86.54   1  2209      2209
    2  12/31/10  86.30   1  2339      2339
    3  08/09/11  82.69   0   984         0
    4  08/10/11  78.23   0   880         0
    5  09/02/11  79.34  -1  1015     -1015
    6  09/06/11  78.08  -1  1002     -1002
    

    编辑:

    您可以将fillnamethod='ffill' 一起使用:

    print df
         Dates()  Close  Re  Size  Position
    0   12/30/10  86.54   1   100       100
    1   12/30/10  86.54   1   100       100
    2   12/29/10  86.76   0  2073         0
    3   12/30/10  86.54   1  2209      2209
    4   12/30/10  86.54   1 -2209     -2209
    5   12/29/10  86.76   0  2073         0
    6   12/30/10  86.54   1  2209      2209
    7   12/29/10  86.76   0  2073         0
    8   12/31/10  86.30   1  2339      2339
    9   08/09/11  82.69   0   984         0
    10  08/10/11  78.23   0   880         0
    11  09/02/11  79.34  -1  1015     -1015
    12  09/06/11  78.08  -1  1002     -1002
    13  09/06/11  78.08   1    20        20
    
    
    df.loc[((df['Position'].shift()).fillna(1)) == 0,'pos'] = df['Position']
    df.loc[ df['Position'] == 0, 'pos'] = 0
    df.at[0,'pos'] = df.at[0,'Position']
    df['pos'] = df['pos'].fillna(method='ffill')
    
    print df
         Dates()  Close  Re  Size  Position   pos
    0   12/30/10  86.54   1   100       100   100
    1   12/30/10  86.54   1   100       100   100
    2   12/29/10  86.76   0  2073         0     0
    3   12/30/10  86.54   1  2209      2209  2209
    4   12/30/10  86.54   1 -2209     -2209  2209
    5   12/29/10  86.76   0  2073         0     0
    6   12/30/10  86.54   1  2209      2209  2209
    7   12/29/10  86.76   0  2073         0     0
    8   12/31/10  86.30   1  2339      2339  2339
    9   08/09/11  82.69   0   984         0     0
    10  08/10/11  78.23   0   880         0     0
    11  09/02/11  79.34  -1  1015     -1015 -1015
    12  09/06/11  78.08  -1  1002     -1002 -1015
    13  09/06/11  78.08   1    20        20 -1015
    

    【讨论】:

    • 谢谢你,jezrael 的帮助。缺少的部分是,一旦我选择了一个值,我需要保持相同的值,位置应该是 [0,2209,2209,0,0,-1015,-1015]
    猜你喜欢
    • 2018-05-20
    • 2022-01-22
    • 2021-10-17
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    相关资源
    最近更新 更多