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

按周聚合时间序列数据:设备rul与预测值的周度分组实现问询

按周度聚合设备剩余使用寿命数据的实现方案

需求背景

现有包含3年历史数据的DataFrame,字段包括rul(剩余使用寿命)、pred_diff、machineID(设备ID)、datetime(时间戳),需实现按设备+周度聚合,每个设备对应约156行(3年×52周)结果,无数据的周需保留空行并按需填充。


实现步骤

1. 标准化时间字段,生成全量周序列

先统一时间格式,然后生成覆盖整个3年周期的所有周起始/结束日期,确保无遗漏:

import pandas as pd

# 确保datetime为datetime类型
y_test['datetime'] = pd.to_datetime(y_test['datetime'])

# 获取数据集的时间边界,计算覆盖全周期的周序列(以每周一作为周起始)
min_dt = y_test['datetime'].min()
max_dt = y_test['datetime'].max()
all_weeks = pd.date_range(
    start=min_dt - pd.Timedelta(days=min_dt.weekday()),  # 对齐到周一
    end=max_dt + pd.Timedelta(days=6 - max_dt.weekday()),  # 对齐到周日
    freq='W-MON'  # 每周生成一条周一的日期,可替换为W-SUN用周日作为周结束
)

2. 构建设备-周的笛卡尔积网格

生成每个设备与所有周的组合,保证每个设备的每一周都有对应的记录:

# 获取所有唯一设备ID
machine_ids = y_test['machineID'].unique()

# 生成设备ID与周序列的笛卡尔积
machine_week_grid = pd.MultiIndex.from_product(
    [machine_ids, all_weeks],
    names=['machineID', 'week_start']
).reset_index(drop=True)

3. 给原始数据标记所属周

将每条原始数据映射到对应的周起始日期,方便后续关联:

# 计算每条数据对应的周起始日期(与all_weeks的规则一致)
y_test['week_start'] = y_test['datetime'] - pd.to_timedelta(y_test['datetime'].dt.weekday, unit='D')

4. 关联数据并按周聚合

通过左连接保留所有设备-周组合,然后聚合计算所需指标,处理无数据的周:

# 左连接网格与原始数据,确保所有周都被保留
merged_data = machine_week_grid.merge(y_test, on=['machineID', 'week_start'], how='left')

# 按设备+周聚合,计算rul和pred_diff的均值(可替换为sum/max等统计量)
weekly_agg_result = merged_data.groupby(['machineID', 'week_start']).agg(
    avg_rul=('rul', 'mean'),
    avg_pred_diff=('pred_diff', 'mean')
).reset_index()

# 处理无数据的周:填充NaN为0或其他默认值,根据业务需求调整
weekly_agg_result = weekly_agg_result.fillna(0)

结果说明

最终的weekly_agg_result中,每个machineID对应3年周期内的所有周记录(约156行),无数据的周会用指定值填充,完全满足需求。

内容的提问来源于stack exchange,提问作者PeakyBlinder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:36:30