Python 如何将某个组的值按不同的量移动

Python 如何将某个组的值按不同的量移动,python,pandas,Python,Pandas,我有一个如下所示的数据帧: user data 0 Kevin 1 1 Kevin 3 2 Sara 5 3 Kevin 23 ... 我想得到历史值(向前看2个条目)作为行: 现在,我可以通过以下命令执行此操作: _temp = df.groupby(['user'], as_index = False)['data'] for i in range(1,2): data['data_{0}'.format(i)] = _temp.

我有一个如下所示的数据帧:

    user   data
0   Kevin    1
1   Kevin    3
2   Sara     5
3   Kevin    23
...
我想得到历史值(向前看2个条目)作为行:

现在,我可以通过以下命令执行此操作:

_temp = df.groupby(['user'], as_index = False)['data']
for i in range(1,2):
   data['data_{0}'.format(i)] = _temp.shift(-1)
我觉得我的方法效率很低,而且有一种更快的方法可以做到这一点(特别是当前瞻/回望值的数量增加时)

您可以与
设置索引()
一起使用,并且:


您可以与
set_index()
和一起使用:



我不认为这是无效的。我的2美分:你可能想思考你的问题,也许你不需要转移所有的数据,但是其中的一部分--如果你想谈论性能,做一些基准测试,测试这个函数对你有用到什么程度:)我不认为这是无效的。我的2美分:你可能想思考你的问题,也许你不需要转移所有的数据,但需要转移其中的一部分--如果你想谈论性能,做一些基准测试,测试这个函数对你有用到哪一点:)
_temp = df.groupby(['user'], as_index = False)['data']
for i in range(1,2):
   data['data_{0}'.format(i)] = _temp.shift(-1)
m=df.assign(k=df.groupby('user').cumcount().astype(str)).set_index(['user','k']).unstack()
m.columns=m.columns.map('_'.join)
print(m)
       data_0  data_1  data_2
user                         
Kevin     1.0     3.0    23.0
Sara      5.0     NaN     NaN