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

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

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

10-12 07:32