

python初心者です。よろしくお願いします。

下記は正常に動くのですが、

[code]

    df['ud_flag'] = df.apply(lambda x : 1 if x.p == 1 else(-1 if x.p == -1 else 0),axis=1)
    
[/code]

udのフラグとして、1又は-1の値のみにしたい。  
つまり、udが0値の部分を、前回の1、又は-1のままとしたいので、下記のように修正するとエラーになります。

[code]

    df['ud_flag'] = df.apply(lambda x : 1 if x.p == 1 else(-1 if x.p == -1 else x.p.shift(1)),axis=1)
    
[/code]

エラー内容

[code]

    AttributeError: ("'int' object has no attribute 'shift'", 'occurred at index 0')
    
[/code]

データ

[code]

    ud    ud_flag
    0
    0
    1
    0
    0
    -1
    0
    1
    0
    0
    
[/code]


CC BY-SA 4.0
2018-12-13T05:25:55.220
51163
2018-12-13T08:52:33.903
2018-12-13T05:27:16.097
19110
31357
question
python pandas
shift()の使い方について


shift()は確か、配列に対して行、列をずらす関数です。  
なので、int型には使えないと思われます。


CC BY-SA 4.0
2018-12-13T06:55:45.993
51167
2018-12-13T06:55:45.993
29506
51163
answer


`shift()`じゃないですが、前方穴埋めのために一回マスクするとかどうでしょう。

[code]

    import pandas as pd
    df = pd.DataFrame({'ud': '''0
    0
    1
    0
    0
    -1
    0
    1
    0
    0'''.split('\n')})
    
    df['ud_flag'] = df.mask(df['ud'] == '0').fillna(method='ffill') \
                                            .fillna('0')
    
[/code]


CC BY-SA 4.0
2018-12-13T08:52:33.903
51176
2018-12-13T08:52:33.903
10685
51163
answer