2017-10-10 115 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