在分组的熊猫数据框中创建两个移位的列

时间:2019-11-14 09:54:19

标签: python pandas dataframe

我已经看了很多遍,但仍然找不到如何在其组内的Pandas Dataframe中创建两个移位列的示例。

我已经完成了以下一栏:

data_frame['previous_category'] = data_frame.groupby('id')['category'].shift()

但是我必须使用2列,一个向上移动,另一个向下移动。

有什么想法吗?

1 个答案:

答案 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