2016-08-18 218 views
0

在Pandas中,我試圖弄清楚如何生成一個列,即當前行的時間與最後一行的時間之間的差值另一列是正確的:熊貓,基於另一列的值減去的值

所以給出的數據框:

df = pd.DataFrame({'Time':[5,10,15,20,25,30,35,40,45,50], 
      'Event_Occured': [True,False,False,True,True,False,False,True,False,False]}) 

print df 

    Event_Occured Time 
0   True  5 
1   False 10 
2   False 15 
3   True 20 
4   True 25 
5   False 30 
6   False 35 
7   True 40 
8   False 45 
9   False 50 

我想產生一列是這樣的:非常

Event_Occured Time Time_since_last 
0   True  5    0 
1   False 10    5 
2   False 15    10 
3   True 20    0 
4   True 25    0 
5   False 30    5 
6   False 35    10 
7   True 40    0 
8   False 45    5 
9   False 50    10 

謝謝!

+0

請告訴我們,到目前爲止,你已經嘗試的步驟和在什麼地方你是失敗實現輸出。 –

回答

1

這裏的填充相應的與最後的有效觀察Falses值替代:

df['Time'] - df.loc[df['Event_Occured'], 'Time'].reindex(df.index).ffill() 
Out: 
0  0.0 
1  5.0 
2 10.0 
3  0.0 
4  0.0 
5  5.0 
6 10.0 
7  0.0 
8  5.0 
9 10.0 
Name: Time, dtype: float64 
+0

謝謝!完美地工作! – Snapula

3

使用df.Event_Occured.cumsum()爲您提供了不同的組groupby。然後,應用每個組中減去第一個成員的值的函數就可以得到您想要的結果。

df['Time_since_last'] = \ 
    df.groupby(df.Event_Occured.cumsum()).Time.apply(lambda x: x - x.iloc[0]) 

df 

enter image description here

相關問題