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

列方向条件累计求和/结转:实现kWh数值上限管控与超额向后结转

电量封顶结转需求实现方案

核心思路

逐行累计结转电量:每一期的可分配电量为当期原始kWh加上期结转的超额电量,取该值与阈值20的较小值作为当期limit_kWh,剩余部分自动结转到下一期,最终保证全周期总电量与原始数据一致。

代码实现(Python Pandas)

import pandas as pd

# 1. 读取并预处理数据
# 替换为你的数据读取路径,支持csv/excel等格式
df = pd.read_csv("your_data_path.csv")
# 转换时间列格式,确保按时间顺序处理
df["interval starting"] = pd.to_datetime(df["interval starting"])
# 按区间时间升序排序,避免时间乱序导致结转逻辑错误
df = df.sort_values("interval starting").reset_index(drop=True)

# 2. 配置参数
CAPACITY = 20.0
# 初始化结转电量变量
carry_over = 0.0
limit_kwh_result = []

# 3. 逐行计算封顶后电量
for _, row in df.iterrows():
    # 当期总可分配电量 = 当期原始电量 + 上期结转电量
    total_available = row["kWh"] + carry_over
    # 当期封顶电量取可分配值和上限的较小值
    current_limit = min(total_available, CAPACITY)
    limit_kwh_result.append(current_limit)
    # 更新下期结转电量
    carry_over = total_available - current_limit

# 4. 结果赋值与校验
df["limit_kWh"] = limit_kwh_result
# 校验总电量一致性(忽略浮点精度误差)
assert round(df["kWh"].sum(), 6) == round(df["limit_kWh"].sum() + carry_over, 6), "计算逻辑错误,总电量不匹配"
# 若全周期所有区间均顶格后仍有剩余电量,默认追加到最后一个区间
if carry_over > 0:
    df.loc[df.index[-1], "limit_kWh"] += carry_over

# 可选:输出结果到文件
# df.to_csv("processed_result.csv", index=False)

逻辑验证示例

以3期测试数据为例:

  • 原始kWh序列:[25, 18, 10],总电量53
  • 处理后limit_kWh序列:[20, 20, 13],总电量53,每期均不超过20阈值,符合预期。

注意事项

  • 若你的时间列本身已经是严格升序排列,可以跳过排序步骤
  • 阈值CAPACITY可根据需求自由调整,无需修改其他逻辑
  • 几万行数据的遍历速度完全满足普通使用需求,无需优化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:15:02