这是我的数据框:
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
现在我想要分别在A,B和C列中Z,Y和X的偏移值,但实际上是将X的偏移值放在A中,依此类推。我也尝试了以下方法,但是也没有用。
df_temp[['A', 'B', 'C']] = df_temp.groupby(['Zip_Code', 'Month'], sort=False)[['Z', 'Y', 'X']].shift()
答案 0 :(得分:2)
您必须在sort=False
中包含参数groupby
:
df_temp[['A', 'B', 'C']] = df_temp.groupby(['Zip_Code', 'Month'], sort=False)[['Z', 'Y', 'X']].shift()
print(df_temp)
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 15.305484
13 75001 2010 2 9.624643 5.773214 1.866071 19.048929
14 75001 2010 3 19.230645 13.315161 7.654516 20.611290
15 75001 2010 4 24.945667 19.666000 14.668667 24.483000
16 75001 2010 5 30.663548 25.054194 19.930000 28.280968
17 75001 2010 6 35.557667 30.203667 25.483667 34.353333
18 75001 2010 7 34.858065 30.072258 25.700323 35.682258
19 75001 2010 8 38.173226 32.203871 26.972581 35.323548
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 2.188065
13 13.492143 7.600714
14 15.179032 9.875806
15 18.444333 12.760667
16 22.974516 18.156129
17 28.962667 23.890000
18 30.250645 25.270645
19 29.731935 24.554194