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

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

```

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

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

```

    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)
    
```

エラー内容

```

    AttributeError: ("'int' object has no attribute 'shift'", 'occurred at index 0')
    
```

データ

```

    ud    ud_flag
    0
    0
    1
    0
    0
    -1
    0
    1
    0
    0
    
```
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()`じゃないですが、前方穴埋めのために一回マスクするとかどうでしょう。

```

    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')
    
```
CC BY-SA 4.0
2018-12-13T08:52:33.903
51176
2018-12-13T08:52:33.903
10685
51163
answer