df['X'] = df['Z'].shift(1)
Index X Y Z
0 0 NaN NaN 10
1 1 10.0 NaN 20
2 2 20.0 NaN 30
3 3 30.0 NaN 40
4 4 40.0 NaN 50
5 5 50.0 NaN 60
6 6 60.0 NaN 70
7 7 70.0 NaN 80
8 8 80.0 NaN 90
9 9 90.0 NaN 100
Вот обновленная версия (обновленная также для Y):
df['X'] = df['Z'].shift(1)
df['Y'] = df['Z'].shift(2)
Index X Y Z
0 0 NaN NaN 10
1 1 10.0 NaN 20
2 2 20.0 10.0 30
3 3 30.0 20.0 40
4 4 40.0 30.0 50
5 5 50.0 40.0 60
6 6 60.0 50.0 70
7 7 70.0 60.0 80
8 8 80.0 70.0 90
9 9 90.0 80.0 100
Я не могу понять, почему вы настаиваете на решении for-l oop для вашего требование. Вот он:
def update_X_Y(frame):
for x in range(frame.shape[0]):
frame.loc[x+1,'X'] = frame.loc[x,'Z']
frame.loc[x+2,'Y'] = frame.loc[x,'Z']
## Calling the function:
update_X_Y(df)
Я бы не использовал for-l oop.