Вот мой фрейм данных:
Zip_Code Year Month Z Y X
0 75001 2009 1 15.305484 8.798710 2.188065
1 75001 2009 2 19.048929 13.492143 7.600714
2 75001 2009 3 20.611290 15.179032 9.875806
3 75001 2009 4 24.483000 18.444333 12.760667
4 75001 2009 5 28.280968 22.974516 18.156129
5 75001 2009 6 34.353333 28.962667 23.890000
6 75001 2009 7 35.682258 30.250645 25.270645
7 75001 2009 8 35.323548 29.731935 24.554194
8 75001 2009 9 29.390667 24.611667 20.113000
9 75001 2009 10 22.349032 17.384194 12.510968
10 75001 2009 11 20.927000 15.519333 9.945000
11 75001 2009 12 10.628710 6.182903 1.632258
12 75001 2010 1 11.685806 7.114839 2.366774
13 75001 2010 2 9.624643 5.773214 1.866071
14 75001 2010 3 19.230645 13.315161 7.654516
15 75001 2010 4 24.945667 19.666000 14.668667
16 75001 2010 5 30.663548 25.054194 19.930000
17 75001 2010 6 35.557667 30.203667 25.483667
18 75001 2010 7 34.858065 30.072258 25.700323
19 75001 2010 8 38.173226 32.203871 26.972581
Я хочу получить показания столбцов Z, Y и X за тот же месяц прошлого года. Вот что я получил, когда попробовал следующий код:
df_temp[['A', 'B', 'C']] = df_temp.groupby(['Zip_Code', 'Month'])[['Z', 'Y', 'X']].shift()
Zip_Code Year Month Z Y X A \
0 75001 2009 1 15.305484 8.798710 2.188065 NaN
1 75001 2009 2 19.048929 13.492143 7.600714 NaN
2 75001 2009 3 20.611290 15.179032 9.875806 NaN
3 75001 2009 4 24.483000 18.444333 12.760667 NaN
4 75001 2009 5 28.280968 22.974516 18.156129 NaN
5 75001 2009 6 34.353333 28.962667 23.890000 NaN
6 75001 2009 7 35.682258 30.250645 25.270645 NaN
7 75001 2009 8 35.323548 29.731935 24.554194 NaN
8 75001 2009 9 29.390667 24.611667 20.113000 NaN
9 75001 2009 10 22.349032 17.384194 12.510968 NaN
10 75001 2009 11 20.927000 15.519333 9.945000 NaN
11 75001 2009 12 10.628710 6.182903 1.632258 NaN
12 75001 2010 1 11.685806 7.114839 2.366774 2.188065
13 75001 2010 2 9.624643 5.773214 1.866071 7.600714
14 75001 2010 3 19.230645 13.315161 7.654516 9.875806
15 75001 2010 4 24.945667 19.666000 14.668667 12.760667
16 75001 2010 5 30.663548 25.054194 19.930000 18.156129
17 75001 2010 6 35.557667 30.203667 25.483667 23.890000
18 75001 2010 7 34.858065 30.072258 25.700323 25.270645
19 75001 2010 8 38.173226 32.203871 26.972581 24.554194
B C
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN
6 NaN NaN
7 NaN NaN
8 NaN NaN
9 NaN NaN
10 NaN NaN
11 NaN NaN
12 8.798710 15.305484
13 13.492143 19.048929
14 15.179032 20.611290
15 18.444333 24.483000
16 22.974516 28.280968
17 28.962667 34.353333
18 30.250645 35.682258
19 29.731935 35.323548
Теперь мне нужны смещенные значения Z, Y и X в столбцах A, B и C соответственно, но на самом деле это смещенное значение X в A и так далее. Я тоже попробовал следующее, но и это не сработало.
df_temp[['A', 'B', 'C']] = df_temp.groupby(['Zip_Code', 'Month'], sort=False)[['Z', 'Y', 'X']].shift()