You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按小时、日、月维度聚合处理传感器时间序列数据?

如何按小时、日、月维度聚合处理传感器时间序列数据?

嘿,我来帮你搞定传感器时间序列的多维度聚合问题!先梳理下咱们的前提:你已经拿到了包含温度、光照、湿度的传感器数据,并且把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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 14:28:15