在利用Python进行数据操作时,有时需要对数据某列数据进行上下平移,比如对某一列进行错位加减,pandas里的groupby和shift两个函数就能轻松实现上述操作。
df = pd.DataFrame({"name":["a","a","a","b","b","c"], "value":[1,2,3,4,5,6]})
df
name value
0 a 1
1 a 2
2 a 3
3 b 4
4 b 5
5 c 6
将value列按name分组并将值在列内上下平移
# 向下平移
df['value_shift'] = df.groupby('name')['value'].shift(1)
df
name value value_shift
0 a 1 NaN
1 a 2 1.0
2 a 3 2.0
3 b 4 NaN
4 b 5 4.0
5 c 6 NaN
# 向上平移
df['value_shift_1'] = df.groupby('name')['value'].shift(-1)
df
name value value_shift value_shift_1
0 a 1 NaN 2.0
1 a 2 1.0 3.0
2 a 3 2.0 NaN
3 b 4 NaN 5.0
4 b 5 4.0 NaN
5 c 6 NaN NaN
通过shift函数里面的值来控制向前还是向后偏移, 缺少的值会填充NaN,groupby函数里的参数控制基于什么字段进行shift.