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

如何拆分DataFrame并按规则合并计算传感器时序数据?

解决方案

核心思路

先统一时间粒度到秒,处理同秒多记录的去重问题,再补全所有秒级时间点并用上一秒数据填充缺失,最后合并两个传感器的数据计算总和。

具体步骤及代码

假设你的DataFrame名为df,包含sensor_id、timestamp、current、apparent_power字段:

  1. 转换时间戳到秒级
    先把timestamp转为datetime类型,再取整到秒,生成统一的秒级时间字段:

    import pandas as pd
    
    # 确保timestamp为datetime格式
    df['timestamp'] = pd.to_datetime(df['timestamp'])
    # 生成秒级时间戳,统一时间粒度
    df['second_ts'] = df['timestamp'].dt.floor('S')
    
  2. 处理同秒多记录:每个传感器每秒仅保留一条
    按传感器ID和秒级时间分组,取每组最后一条记录(也可根据业务需求用first()),消除同秒多条数据的异常:

    # 分组去重,确保每个传感器每秒只有一条数据
    df_clean = df.groupby(['sensor_id', 'second_ts']).last().reset_index()
    
  3. 补全秒级时间线,用前一秒数据填充缺失
    拆分两个传感器的数据,补全所有存在的秒级时间点,并用ffill()自动填充缺失值:

    # 拆分两个传感器的干净数据
    sensor0 = df_clean[df_clean['sensor_id'] == 0].set_index('second_ts')
    sensor1 = df_clean[df_clean['sensor_id'] == 1].set_index('second_ts')
    
    # 生成覆盖所有数据的完整秒级时间序列
    all_seconds = pd.date_range(start=df_clean['second_ts'].min(), end=df_clean['second_ts'].max(), freq='S')
    
    # 重采样补全时间点,用上一秒数据填充缺失
    sensor0_full = sensor0.reindex(all_seconds).ffill().reset_index().rename(columns={'index': 'second_ts'})
    sensor1_full = sensor1.reindex(all_seconds).ffill().reset_index().rename(columns={'index': 'second_ts'})
    
  4. 合并数据并计算总和
    按秒级时间合并两个传感器的完整数据,最终计算电流和视在功率的总和:

    # 合并两个传感器的完整数据
    merged_df = pd.merge(sensor0_full, sensor1_full, on='second_ts', suffixes=('_0', '_1'))
    
    # 计算总和字段
    merged_df['total_current'] = merged_df['current_0'] + merged_df['current_1']
    merged_df['total_apparent_power'] = merged_df['apparent_power_0'] + merged_df['apparent_power_1']
    
    # 整理最终结果
    final_df = merged_df[['second_ts', 'total_current', 'total_apparent_power']]
    

关键说明

  • 同秒多记录处理:通过groupby+聚合函数直接去重,避免重复计算
  • 缺失值填充:reindex补全时间点后用ffill()自动继承前一秒数据,无需手动循环
  • 时间覆盖:pd.date_range确保不会漏掉任何出现过的秒级时间点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:42:46