我有一个看起来像这样的DataFrame:
user data
0 Kevin 1
1 Kevin 3
2 Sara 5
3 Kevin 23
...
我想以行的形式获取历史值(看起来像是说两个条目):
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)
我觉得我的方法效率很低,而且有一种更快的方法(尤其是当超前/回溯值增加时)!
最佳答案
您可以将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
关于python - 如何将某个组的值移动不同的数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57112371/