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