我有以下Pandas数据帧:
x y z value
0 1 a a 1
1 1 b b 2
2 1 c c 3
3 1 d d 4
4 1 a e 5
5 2 b f 6
6 2 c a 7
7 2 d b 8
8 2 a c 9
我需要将其转换为:
x y z value value t-1
0 1 a a 1 NaN
1 1 b b 2 1
2 1 c c 3 2
3 1 d d 4 3
4 1 a e 5 4
5 2 b f 6 NaN
6 2 c a 7 6
7 2 d b 8 7
8 2 a c 9 8
我该怎么做?
答案 0 :(得分:3)
df['value_t_minus1'] = df.groupby('x')['value'].transform(lambda x: x.shift())
>>> df
x y z value value_t_minus1
0 1 a a 1 NaN
1 1 b b 2 1.0
2 1 c c 3 2.0
3 1 d d 4 3.0
4 1 a e 5 4.0
5 2 b f 6 NaN
6 2 c a 7 6.0
7 2 d b 8 7.0
8 2 a c 9 8.0
答案 1 :(得分:2)
你需要:
df['value_t_minus1'] = df.groupby('x')['value'].shift()