获取按1小时时间窗口分组的列的平均值

2024-04-25 06:27:39 发布

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

我有以下数据帧:

输入

df = pd.DataFrame(
{'DeviceID' : ['358639059721158', '358639059721158', '358639059721158', '358639059721158', '358639059721158', '358639059721304', '358639059721304'],
 'AssetSerialNo':['BKK-XYZ00005', 'BKK-XYZ00005', 'BKK-XYZ00005', 'BKK-XYZ00005', 'BKK-XYZ00005', 'IST-XYZ00004', 'IST-XYZ00004'], 
 'Date' :['9/5/2018 6:00', '9/5/2018 6:01', '9/5/2018 6:59', '9/5/2018 7:04', '9/5/2018 8:54', '28/5/2018 23:40', '28/5/2018 23:59'],
 'ParameterValue': [0.475, 0.375, 0.175, 0.575, 0.115, 0.234, 0.575],
 'Tc': [-18.000000, -16.000000, -14.000000, -12.000000, -11.000000, -29.000000, -28.000000],
 'compressor': [0, 0, 1, 1, 1, 1, 1],
 'Ta': [31.784826, 32.784826, 33.784826, 43.784826, 23.784826, 54.784826, 31.784826],
 'label': [0, 0, 0, 1, 0, 0, 0],
 'FaultType_Rcap': [0, 0, 0, 0, 0, 0, 0],
 'FaultType_Rec': [0, 0, 0, 0, 0, 0, 0],
 'FaultType_Ri': [0, 0, 0, 0, 0, 0, 0],
 'FaultType_normal': [1, 1, 1, 1, 1, 1, 1]})

Dummt dataset of some metrics by minute(如果要复制任务,请添加一个虚拟表)

如你所见,我有一个“日期”栏,每小时增加1分钟。尽管某些行可能不会每小时生成60行数据(1小时=60分钟)。这是设备id为“358639059721304”的情况,它在23:00-00:00之间只发送了两行

我想做的是按每个设备1小时的间隔对数据帧的行进行分组。例如,我想做如下的事情:

输出

| DeviceID | AssetSerialNo | Date | ParameterValue | Tc | compressor | Ta | label | FaultType_Rcap | FaultType_Rcond | FaultType_Rec | FaultType_Ri | FaultType_normal | |-----------------|---------------|-----------------|-----------------------|--------------------------------------|------------|-----------------------------------|-------|----------------|-----------------|---------------|--------------|------------------| | 358639059721158 | BKK-XYZ00005 | 9/5/2018 6:00 | (0.475+0.325+0.525)/3 | (-18.000000+-16.720951+-11.720951)/3 | (0+0+1)/3 | (24.742001+20.742001+35.742001)/3 | 1 | 0 | 0 | 0 | 0 | 1 | | 358639059721158 | BKK-XYZ00005 | 9/5/2018 7:04 | (0.225_0.105)/2 | (-0.720951+-22.720951)/2 | (1+1)/2 | (5.742001+15.742001)/2 | 1 | 0 | 0 | 0 | 0 | 1 | | 358639059721304 | IST-XYZ00004 | 28/5/2018 23:40 | (0.127544+0.097544)/2 | (-11.720951+-15.288659)/2 | (0+0)/2 | (31.742001+11.742001)/2 | 1 | 0 | 0 | 0 | 0 | 1 | 因此,输出按1小时的间隔对数据进行分组,并找到其余列的平均值。我的目标是减少数据样本。总的来说,1000000行要少得多,按每个设备1小时对数据进行分组。我希望您使用pandas DataFrame对此进行思考,尽管我也希望使用PySpark。但解决方案是第一位的

我当前的方法(未完成)

date_obj=datetime.strptime(dataframe_classification['Date'].iloc[0], '%d/%m/%Y %H:%M') #create datetime format of "Date" column

[(date_time_obj + timedelta(minutes=x)).strftime("%M") for x in range(60)] #apply some timedelta 60 minutes later

提前感谢您的帮助和建议


Tags: 数据dataframedatecompressortc小时tadeviceid