簡體   English   中英

通過使用熊貓將現有列向下移動1行來創建新列

[英]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_IDeventdatetime

我想創建一個新列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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM