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

如何拆分含剩余能源峰值的数据集并计算各峰值面积

解决能源峰值能量计算问题

步骤1:标记连续峰值组

首先将连续的非零数据段标记为同一分组,零值数据排除在分组外:

import pandas as pd
import numpy as np

# 加载数据(示例数据)
df = pd.DataFrame()
df['Value'] = [0, 0, 0, 0, 1, 1, 0, 1, 2, 4, 3, 0, 4, 0, 1, 0, 4, 0, 1, 0]
df['Timestamp'] = pd.date_range(start='1/1/2018', periods=len(df), freq='15T')

# 生成峰值组ID:连续非零区域分配同一ID,零值标记为NaN
df['peak_group'] = df['Value'].ne(0).cumsum().where(df['Value'].ne(0))
  • df['Value'].ne(0):生成布尔列,标记所有非零数据
  • cumsum():每次遇到非零值时累加,让连续非零数据拥有相同的组ID
  • where(df['Value'].ne(0)):将零值对应的组ID设为NaN,避免分组时包含无效的零值段

步骤2:计算每个峰值的能量总量

由于数据是固定15分钟间隔(0.25小时),采用梯形法计算曲线下面积(能量),比简单求和更准确:

# 方法1:通用型计算(支持非固定时间间隔)
peak_energy = df.groupby('peak_group').apply(
    lambda x: np.trapz(x['Value'], x['Timestamp'].astype('int64') / 3.6e12)
).reset_index(name='total_energy_kWh')

# 方法2:固定间隔优化计算(效率更高,适合大数据量)
# peak_energy = df.groupby('peak_group').apply(
#     lambda x: (x['Value'].rolling(2).mean().dropna() * 0.25).sum()
# ).reset_index(name='total_energy_kWh')

print(peak_energy)
  • 方法1中,x['Timestamp'].astype('int64') / 3.6e12将纳秒时间戳转换为小时数,np.trapz自动用梯形法计算曲线下面积
  • 方法2利用固定间隔特性,计算相邻两点的平均值乘以时间间隔(0.25小时)后求和,结果与方法1完全一致,计算速度更快

结果说明

示例数据的输出如下,每一行对应一个独立峰值,total_energy_kWh为该峰值的总能量(假设Value单位为kW):

peak_group  total_energy_kWh
0           1              0.50
1           2              2.25
2           3              1.00
3           4              0.25
4           5              1.00
5           6              0.25

大数据量适配

该方法针对近一年的15分钟数据(约3.5万条)完全适用,Pandas的groupby和apply操作在该数据量下性能优异,无需手动处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:50:18