Python 熊猫:合并日期时间间隔

Python 熊猫:合并日期时间间隔,python,pandas,Python,Pandas,我有一个数据框,表示某种事件的开始和结束时间,例如,当工厂中的机器停止时: machine_id start_date end_date 1 1 2016-10-01 00:00:00 2016-10-01 03:00:00 2 1 2016-10-03 05:30:00 2016-10-03 06:30:00 3 2 2016-10-03 23:30:00

我有一个数据框,表示某种事件的开始和结束时间,例如,当工厂中的机器停止时:

machine_id start_date end_date 1 1 2016-10-01 00:00:00 2016-10-01 03:00:00 2 1 2016-10-03 05:30:00 2016-10-03 06:30:00 3 2 2016-10-03 23:30:00 2016-10-04 01:00:00 4 1 2016-10-04 05:00:00 2016-10-04 06:00:00 5 2 2016-10-04 05:50:00 2016-10-04 06:00:00 6 1 2016-10-05 18:50:00 2016-10-06 02:00:00 .... 机器id开始日期结束日期 1 1 2016-10-01 00:00:00 2016-10-01 03:00:00 2 1 2016-10-03 05:30:00 2016-10-03 06:30:00 3 2 2016-10-03 23:30:00 2016-10-04 01:00:00 4 1 2016-10-04 05:00:00 2016-10-04 06:00:00 5 2 2016-10-04 05:50:00 2016-10-04 06:00:00 6 1 2016-10-05 18:50:00 2016-10-06 02:00:00 .... 我需要获得任何机器停止的总分钟数,按给定的粒度分组:每月、每周、每天。。。例如,如果粒度为每日,则所需输出为:

date total_time 1 2016-10-01 180 2 2016-10-02 0 3 2016-10-03 90 4 2016-10-04 130 5 2016-10-05 310 6 2016-10-06 120 ... 日期总时间 1 2016-10-01 180 2 2016-10-02 0 3 2016-10-03 90 4 2016-10-04 130 5 2016-10-05 310 6 2016-10-06 120 ... 如果粒度为每月一次,则输出将为:

date total_time 1 2016-10-01 830 日期总时间 1 2016-10-01 830
我的直觉告诉我这可能与
resample()
有关,但我不知道如何使用
resample
和两个不同的列。

使用
groupby
怎么样

In [67]: df = pandas.read_csv('data', parse_dates=[1, 2])

In [68]: for d, dfg in df.groupby(lambda i: df.end_date[i].date()):
    ...:     print d, (dfg.end_date - dfg.start_date).sum()
    ...: 
2016-10-03 0 days 08:27:23
2016-10-04 1 days 14:00:04
2016-10-31 56 days 19:26:40.344080

我不知道你说的“机器停止时”是什么意思:大概你指的是某个特定事件被触发时。如果是这样的话,只需在上述分组之前过滤
df

听起来你想要在停止和开始日期之间的时间差,不是吗?是的,当然。问题是如何在几天、几周、几个月内“打破”这种三角洲。。。考虑到一台机器可能会停止超过一天、一周或一个月。您是否绝对需要能够给出准确的日历时间指标?月份可能很棘手,因为一个月的天数取决于上下文。通常,
relativedelta
s仅以天和秒为单位保存时间,我认为在这种情况下,这样做是合适的。如果需要,您还可以将天/秒转换为相关的分钟/小时/周/月。换句话说,以最小的相关时间单位存储增量,然后根据需要进行转换。从您的输入和预期输出来看,不清楚您到底需要什么。你能解释或者更好地粘贴真实的输入/输出值吗?我已经更新了示例,使用更简单的输入和真实的输出。不,这不是我需要的。您有
2016-10-31 56天19:26:40.344080
。我需要按天(或月)划分。i、 e:56行一天。只需删除
sum()
即可。