2017-07-16 31 views
0

我有一個有兩列 - 「日」和「事件」的熊貓數據框。在每一天,可以發生任意數量的事件,每個事件都由char表示。我想構建一個額外的列,指示自上次事件發生以來已經過去了多少天。下面的代碼可以說明這一點:Python 3.6:Pandas - 獲取較早的DataFrame列的條目發生

>>> import pandas as pd 
>>> event_data = pd.DataFrame({'Day':[1,1,1,1,2,2,2,3,3,4,4,4,4], 
          'Event':['A','B','C','D','B','F','A','B','C','G','A','B','D']}) 
>>> print(event_data) 

    Day Event 
0  1  A 
1  1  B 
2  1  C 
3  1  D 
4  2  B 
5  2  F 
6  2  A 
7  3  B 
8  3  C 
9  4  G 
10 4  A 
11 4  B 
12 4  D 

我想的附加列「days_since_event」將如下所示:

Day Event Days_since_event 
0  1  A    -1 
1  1  B    -1 
2  1  C    -1 
3  1  D    -1 
4  2  B     1 
5  2  F    -1 
6  2  A     1 
7  3  B     1 
8  3  C     2 
9  4  G    -1 
10 4  A     2 
11 4  B     1 
12 4  D     3 

第12行具有值3作爲事件「d」發生在第4天,並之前的事件發生在第1天,這意味着事件'D'最後一次發生後已過去3天。值爲-1的行表示該事件在當天的第一次發生。

什麼是這樣做的計算最佳方式?原始數據集有超過1000萬行,使用循環或重複數據子集過慢。

回答

3

你可以按Event列數據框和計算Day一個diff這樣的:

event_data['Days_since_event'] = event_data.groupby('Event')['Day']\ 
              .diff().fillna(-1).astype(int) 

每一個事件的發生首先將有NaN值,所以我填那些-1你的問題中所描述的。

+0

工程就像一個魅力。謝謝,dune_dweller :) –

相關問題