如何根据datetime之间的差异合并dataframe中的组行?

2024-04-24 03:35:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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。 e、 在这里,对于5秒的timedelta,我想用索引0,1对行进行分组,用2分钟的timedelta,它应该在0,1,2行中产生

一种解决方案是使用.shift()将连续行与其移位版本进行比较,但是,如果需要合并多于2行的组,则需要多次迭代比较。你知道吗

由于我的df很大,这不是一个选择。你知道吗


Tags: importdataframepandasdfdatetimeindexvalueas
2条回答

我假设你试着根据时差进行聚合。你知道吗

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
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')                                                               

相关问题 更多 >