2017-10-10 7 views
0

StartEnddatatime과 함께 각 행에 이벤트가 포함 된 dataframe이 있습니다.datetime의 차이점을 기반으로 데이터 프레임의 그룹 행을 병합하는 방법은 무엇입니까?

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와 그룹 행에 싶습니다 2 분의 timedelta으로는 해결책이 .shift()을 사용하여 이동 버전으로 연속 행을 비교하는 것 0,1,2

행에 양보해야 2 개 이상의 행 그룹을 병합해야하는 경우 비교를 여러 번 반복해야합니다.

내 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 
관련 문제