列方向条件累计求和/结转:实现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
相关产品推荐
相关产品推荐

