我有以下数据帧:
输入
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]})
如你所见,我有一个“日期”栏,每小时增加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
提前感谢您的帮助和建议
你可能想试试Grouper
相关问题 更多 >
编程相关推荐