我有一个看起来像这样的DataFrame:
user data
0 Kevin 1
1 Kevin 3
2 Sara 5
3 Kevin 23
...
我想以行的形式获取历史值(假设向前看2个条目)
user data data_1 data_2
0 Kevin 1 3 23
1 Sara 5 24 NaN
2 Kim ...
...
现在,我可以通过以下命令执行此操作:
_temp = df.groupby(['user'], as_index = False)['data']
for i in range(1,2):
data['data_{0}'.format(i)] = _temp.shift(-1)
我觉得我的方法效率很低,并且有一种更快的方法(尤其是当超前/回溯值增加时)!
答案 0 :(得分:0)
您可以将groupby.cumcount()
与set_index()
和unstack()
结合使用:
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