如何按小时、日、月维度聚合处理传感器时间序列数据?
如何按小时、日、月维度聚合处理传感器时间序列数据?
嘿,我来帮你搞定传感器时间序列的多维度聚合问题!先梳理下咱们的前提:你已经拿到了包含温度、光照、湿度的传感器数据,并且把timestamp字段转换成了datetime64类型,这步基础工作做得很到位,为后续聚合铺好路啦~
首先咱们先确认时间字段的处理是否到位,你之前写的这段代码就很靠谱:
# 检查时间字段的前5条数据和类型 print(df['timestamp'].head(5)) print(df['timestamp'].dtype) # 带时区的时间转换(确保格式匹配) df['timestamp'] = pd.to_datetime(df['timestamp'], format='%Y-%m-%d %H:%M:%S%z', utc=True)
这一步能保证timestamp是标准的带时区datetime类型,后续的聚合操作才能顺利进行。
接下来分三个维度给你讲具体的聚合方法,你可以根据自己的需求选resample(更适合纯时间周期聚合)或者groupby(适合结合其他维度比如位置一起聚合):
1. 按小时维度聚合
如果要统计每个传感器位置每小时的温度、光照、湿度情况,比如均值、最值,两种方法都能用:
方法一:用resample
# 先把timestamp设为索引 df.set_index('timestamp', inplace=True) # 按小时聚合,自定义要计算的统计量 hourly_agg = df.resample('H').agg({ 'temperature': ['mean', 'max', 'min'], 'light': 'mean', 'humidity': 'mean', 'location': 'first' # 同一小时内同一传感器位置不变,取第一个就行 }).reset_index()
方法二:用groupby(结合位置分组)
# 按小时截断后的时间+位置分组,计算多维度统计量 hourly_agg = df.groupby([df['timestamp'].dt.floor('H'), 'location']).agg({ 'temperature': ['mean', 'max'], 'light': 'sum', # 如果光照是累计型数据,用sum会更合理 'humidity': ['mean', 'min'] }).reset_index()
2. 按日维度聚合
和小时聚合逻辑一样,只需要把时间周期改成D就行:
resample方法
daily_agg = df.resample('D').agg({ 'temperature': ['mean', 'max', 'min'], 'light': 'mean', 'humidity': 'mean' }).reset_index()
groupby方法
daily_agg = df.groupby([df['timestamp'].dt.floor('D'), 'location']).agg({ 'temperature': 'mean', 'light': 'sum', 'humidity': 'mean' }).reset_index()
3. 按月维度聚合
这里注意时间周期用大写的M(小写m是分钟哦):
resample方法
monthly_agg = df.resample('M').agg({ 'temperature': ['mean', 'max', 'min'], 'light': 'mean', 'humidity': ['mean', 'std'] # 加个标准差能看出湿度的波动情况 }).reset_index()
groupby方法
monthly_agg = df.groupby([df['timestamp'].dt.to_period('M'), 'location']).agg({ 'temperature': 'mean', 'light': 'sum', 'humidity': 'mean' }).reset_index() # 如果需要把周期格式转回datetime,加这句: monthly_agg['timestamp'] = monthly_agg['timestamp'].dt.to_timestamp()
最后给你提几个小提醒:
- 统计量要选对:比如温度常用均值、最值;如果光照是累计值,优先用sum;湿度可以加个标准差看波动。
- 一定要结合
location分组!不然会把所有传感器的数据混在一起,结果就没意义了。 - 如果时间转换后有缺失值,记得先用
df.dropna(subset=['timestamp'])清理一下哦。
备注:内容来源于stack exchange,提问作者San
相关产品推荐
相关产品推荐

