Pandas行遍历与日期运算实现办公楼温度波动数据特征列新增
解决方案
以下基于Python的pandas库实现需求,默认你已导入pandas(import pandas as pd)和numpy(import numpy as np)库,且已将数据集读取为DataFrame变量df,索引为DateTime类型。
问题1:新增早间/夜间二分类特征列
你的数据集已提前过滤出仅包含早间、夜间的波动时段,可直接通过时间属性判断标记:
# 确保索引为datetime格式 df.index = pd.to_datetime(df.index) # 自定义时段划分规则,可根据你的实际波动时段调整时间范围 def get_period_tag(timestamp): # 早间时段:6:00-10:00 标记为0 if pd.to_datetime("06:00:00").time() <= timestamp.time() <= pd.to_datetime("10:00:00").time(): return 0 # 夜间时段:18:00-23:59 标记为1 elif pd.to_datetime("18:00:00").time() <= timestamp.time() <= pd.to_datetime("23:59:59").time(): return 1 # 非波动时段(你的数据集已过滤,可忽略) else: return np.nan df['is_night'] = df.index.map(get_period_tag)
如果你的波动时段没有其他杂值,也可以用更简单的小时判断:df['is_night'] = df.index.hour.map(lambda x: 0 if x < 12 else 1)
问题2:按日期、时段计算温度变化时长并追加到所有行
首先提取日期列作为分组依据,再按【日期+时段】分组计算每个组的温度变化时长,最后回填到组内所有行:
# 提取日期列用于分组 df['date'] = df.index.date # 自定义时长计算函数,X、Y为目标温度阈值 def calc_temp_duration(group, X, Y): # 按时间升序排序,保证时序正确 group = group.sort_index() period_tag = group['is_night'].iloc[0] # 早间是升温过程:找首次≥X、首次≥Y的时间差 if period_tag == 0: start_ts = group[group['OfficeTemp'] >= X].index.min() end_ts = group[group['OfficeTemp'] >= Y].index.min() # 夜间是降温过程:找首次≤X、首次≤Y的时间差 else: start_ts = group[group['OfficeTemp'] <= X].index.min() end_ts = group[group['OfficeTemp'] <= Y].index.min() # 计算时长,单位可自行调整:除以3600为小时,除以60为分钟 if pd.notna(start_ts) and pd.notna(end_ts): duration = (end_ts - start_ts).total_seconds() / 60 else: # 该时段未完成X到Y的温度变化,标记为空值 duration = np.nan group['change_duration_min'] = duration return group # 代入你需要的X、Y温度阈值,比如X=17,Y=22 X = 17 Y = 22 df = df.groupby(['date', 'is_night'], group_keys=False).apply(lambda g: calc_temp_duration(g, X, Y))
注意事项
- 若温度变化过程存在波动(比如先升后降),上述逻辑取的是首次达到阈值的时间,如果你需要统计温度在X-Y区间的总停留时长,可调整为取区间内的最早和最晚时间差
- 空值可根据需求过滤或填充,不会影响后续ANN模型训练
内容的提问来源于stack exchange,提问作者Loai Alnouri
相关产品推荐
相关产品推荐

