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

时间:2019-07-19 12:18:27

标签: python pandas

我有一个看起来像这样的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)

我觉得我的方法效率很低,并且有一种更快的方法(尤其是当超前/回溯值增加时)!

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