我正在从事体育运动。 目的是在游戏中记录当前的eventdatetime和PreviousEventTime。我在下面的链接中有一个示例数据集。
https://drive.google.com/open?id=1DUNrWPFwrkZHpq_KeA4rZCJ94sbpUEDI
在此文件中,有11列。该活动是根据时间收集的。 对于此重新安排,我将使用以下列 gsm_ID , eventdatetime 列
我想创建一个新列 PreviousEventTime ,该列占用 eventdatetime 列的n-1行。 这意味着对于每个 gsm_ID ,都会有第一个 eventdatetime 。 与时间列相比,新列将表示下一个事件时间。
gsm_ID eventdatetime PreviousEventTime
2462794 08/11/2017 18:46 08/11/2017 18:45
2462794 08/11/2017 18:49 08/11/2017 18:46
2462794 08/11/2017 19:13 08/11/2017 18:49
2462794 08/11/2017 19:31 08/11/2017 19:13
2462794 08/11/2017 20:09 08/11/2017 19:31
2462795 08/12/2017 17:39 08/12/2017 16:30
2462795 08/12/2017 17:44 08/12/2017 17:39
以上示例仅适用于两场比赛。您可以通过 gsm_id 进行区分。 PreviousEventTime的for行始终为 matchdatetime。 我将有100场比赛。但是这个过程将重复上述例子。
eventdata ['PreviousEventTime-1'] = eventdata.groupby(['gsm_id'])['eventdatetime'].shift(-1)
但它仅适用于第一个 gsm_ID 。它不适用于其他 gsm_ID 。 上面脚本的输出如下:
非常感谢您的建议。 问候, 和风
答案 0 :(得分:0)
正确排序解决了问题。 我在下面的排序和索引中添加了:
eventdata = eventdata.set_index(['gsm_id']) .sort_index(ascending =True)
eventdata=eventdata.sort_values(['matchdatetime','time'],ascending=[True,True])
eventdata ['PreviousEventTime-1'] = eventdata.groupby(['gsm_id','matchdatetime'])['eventdatetime'].shift(1, axis = 0)
但剩下的部分是用 matchdatetime 来填充NaT。 谢谢大家的建议。 问候 和风