我有一个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
和两个不同的列。
答案 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
。