2017-10-10 81 views
0

我有一個dataframe與每行包含事件,與StartEnddatatime如何根據日期時間差異合併數據框中的組行?

import pandas as pd 
import datetime 
df = pd.DataFrame({ 'Value' : [1.,2.,3.], 
'Start' : [datetime.datetime(2017,1,1,0,0,0),datetime.datetime(2017,1,1,0,1,0),datetime.datetime(2017,1,1,0,4,0)], 
'End' : [datetime.datetime(2017,1,1,0,0,59),datetime.datetime(2017,1,1,0,5,0),datetime.datetime(2017,1,1,0,6,00)]}, 
index=[0,1,2]) 

df 
Out[7]: 
        End    Start Value 
0 2017-01-01 00:00:59 2017-01-01 00:00:00 1.0 
1 2017-01-01 00:05:00 2017-01-01 00:01:00 2.0 
2 2017-01-01 00:07:00 2017-01-01 00:06:00 3.0 

我想組連續的行,其中連續行的EndStart之間的差異大於一個給定的timedelta小。 例如此處爲5秒的timedelta我想組行索引0,1並用timedelta 2分鐘應該以行0,1,2

的溶液。將使用.shift()與他們的移版本連續行比較得到,但是,我如果需要合併多於兩行的組,則需要多次迭代比較。

由於我的DF非常大,這不是一個選項。

+3

也許它只是我,但我不知道你的輸出正在尋找 –

+3

顯示您的預期了把./_ \。 – Wen

+0

對不起,這傢伙遲到:(我正在添加所需的輸出 – ErroriSalvo

回答

1
threshold = datetime.timedelta(minutes=5)             
df['delta'] = df['End'] - df['Start']              
df['group'] = (df['delta'] - df['delta'].shift(-1) <= threshold).cumsum()     
groups = df.groupby('group')                
1

我假設你嘗試基於時差進行聚合。

marker = 60 
df = df.assign(diff=df.apply(lambda row:(row.End - row.Start).total_seconds() <= marker, axis=1)) 

for g in df.groupby('diff'): 
    print g[1] 


        End    Start Value diff 
1 2017-01-01 00:05:00 2017-01-01 00:01:00 2.0 False 
2 2017-01-01 00:06:00 2017-01-01 00:04:00 3.0 False 
        End  Start Value diff 
0 2017-01-01 00:00:59 2017-01-01 1.0 True 
相關問題