我已经看了很多遍,但仍然找不到如何在其组内的Pandas Dataframe中创建两个移位列的示例。
我已经完成了以下一栏:
data_frame['previous_category'] = data_frame.groupby('id')['category'].shift()
但是我必须使用2列,一个向上移动,另一个向下移动。
有什么想法吗?
答案 0 :(得分:2)
GroupBy.apply
可以通过自定义功能实现,因为一列需要下移而第二列需要上移:
df = pd.DataFrame({
'B':[4,5,4,5,5,4],
'C':[7,8,9,4,2,3],
'F':list('aaabbb')
})
def f(x):
x['B'] = x['B'].shift()
x['C'] = x['C'].shift(-1)
return x
df = df.groupby('F').apply(f)
print (df)
B C F
0 NaN 8.0 a
1 4.0 9.0 a
2 5.0 NaN a
3 NaN 2.0 b
4 5.0 3.0 b
5 5.0 NaN b
如果要以相同的方式移动,请仅指定列表中的所有列:
df[['B','C']] = df.groupby('F')['B','C'].shift()
print (df)
B C F
0 NaN NaN a
1 4.0 7.0 a
2 5.0 8.0 a
3 NaN NaN b
4 5.0 4.0 b
5 5.0 2.0 b