可以在此处查看示例CSV文件
我有什么:我的 python 代码根据当前值检查工作持续时间。
import csv
from datetime import date,time,datetime
import pandas as pd
import matplotlib.pyplot as plt
def print_output(df):
worktime = len(df.loc[df['AC_Input_Current'] >= 4.9])
noworktime = len(df) - worktime
print ('Daily record: n')
print ('Start: ', df.index.min(), ' - ', 'End:', df.index.max())
print ('%.2f' %(worktime/60),'[in Mins]',' or ','%.2f' %(worktime/3600),'[Hrs]',' of work')
print ('%.2f' %(noworktime/60),'[in Mins]',' or ','%.2f' %(noworktime/3600),'[Hrs]',' of no work done')
print ('Total duration recorded: ','%.2f' %((noworktime + worktime)/60),'[Mins]',' or ','%.2f' %((noworktime + worktime)/3600),'[Hrs]n')
dateparse = lambda x: pd.datetime.strptime(x, '%d/%m/%Y %H:%M:%S')
Data = pd.read_csv('MainD2.csv', parse_dates=['Time_Stamp'], date_parser = dateparse, index_col='Time_Stamp')
Data.resample('D').apply(lambda x: print_output(x))
运行代码后的结果如下: 我在以分钟为单位的持续时间内获得的结果是我想稍微调整一下,但我不确定如何调整。 例如:下面的第一个结果从2017-06-21 01:09:21
开始到2017-06-21 23:15:04
我想得到但不知道如何: - 例如,基于第一个结果;我需要从23:15:04
01:09:21
08:00:00
到12:30:00
、12:31:00
到13:12:00
、13:12:01
到18:30:00
、19:30:00
到23:59:59
- 如果没有从00:00:00
到01:09:20
的值,请忽略它们并根据所需的时间继续获得结果(上述语句)。
Start: 2017-06-21 01:09:21 - End: 2017-06-21 23:15:04
43.75 [in Mins] or 0.73 [Hrs] of work
161.63 [in Mins] or 2.69 [Hrs] of no work done
Total duration recorded: 205.38 [Mins] or 3.42 [Hrs]
Start: 2017-06-22 00:38:54 - End: 2017-06-22 05:47:29
30.25 [in Mins] or 0.50 [Hrs] of work
271.40 [in Mins] or 4.52 [Hrs] of no work done
Total duration recorded: 301.65 [Mins] or 5.03 [Hrs]
Start: 2017-06-23 00:39:50 - End: 2017-06-23 23:10:15
44.23 [in Mins] or 0.74 [Hrs] of work
263.35 [in Mins] or 4.39 [Hrs] of no work done
Total duration recorded: 307.58 [Mins] or 5.13 [Hrs]
Start: 2017-06-24 00:38:10 - End: 2017-06-24 13:33:49
77.83 [in Mins] or 1.30 [Hrs] of work
120.00 [in Mins] or 2.00 [Hrs] of no work done
Total duration recorded: 197.83 [Mins] or 3.30 [Hrs]
Start: 2017-06-25 09:54:25 - End: 2017-06-25 20:16:05
75.62 [in Mins] or 1.26 [Hrs] of work
131.28 [in Mins] or 2.19 [Hrs] of no work done
Total duration recorded: 206.90 [Mins] or 3.45 [Hrs]
Start: 2017-06-26 00:51:32 - End: 2017-06-26 01:05:55
9.18 [in Mins] or 0.15 [Hrs] of work
4.92 [in Mins] or 0.08 [Hrs] of no work done
Total duration recorded: 14.10 [Mins] or 0.23 [Hrs]
由于您使用的是datetime
,看来此解决方案应该适合您:
https://stackoverflow.com/a/35203658/2805387
例如
df[(df['date']>datetime.date(year=2017,month=6,day=24,hour=8,min=0)) & (df['date']<datetime.date(year=2017,month=6,day=24,hour=12,min=30))]
df[(df['date']>datetime.date(year=2017,month=6,day=24,hour=12,min=31)) & (df['date']<datetime.date(year=2017,month=6,day=24,hour=13,min=12))]
依此类推,适用于所有所需的范围
请注意,在该答案中,数据框中日期的列只是'date'
,如果您的日期列具有不同的名称,则必须使用该名称而不是当然。