![](/img/trans.png)
[英]creating new column based on existing column using a dictionary for a Pandas df
[英]Creating a new column by shifting an existing column to 1 row down using pandas
我正在從事體育運動。 目的是記錄游戲中的當前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 。 上面腳本的輸出如下:
您的建議將不勝感激。 問候,西風
排序正確解決了問題。 我添加了以下排序和索引:
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。 謝謝大家給我的建議。 關於西風
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.