熊猫:巩固日期时间间隔

时间:2016-10-31 12:10:09

标签: python pandas

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

     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
....

我需要获取停止任何计算机的总分钟数,按给定的粒度分组:每月,每周,每天...例如,如果粒度是每日,则所需的输出将为:

        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
...

如果粒度是每月,则输出只是:

        date       total_time
1 2016-10-01              830

我的直觉说它可能与resample()有关,但我不知道如何使用resample和两个不同的列。

1 个答案:

答案 0 :(得分:1)

如何使用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

我不确定你的意思"当机器停止时#34;:大概是指某个甚至被触发的时候。如果是这样,请在上述分组之前过滤df