首页 > 解决方案 > 在分组的熊猫数据框中创建两个移位的列

问题描述

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

我用一列完成了它,如下所示:

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

但我必须用 2 列来完成,一列向上移动,另一列向下移动。

有任何想法吗?

标签: pythonpandasdataframe

解决方案


可以通过自定义函数使用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

推荐阅读