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