首页 > 解决方案 > 创建具有最大和最小限制的运行总计

问题描述

我正在计算电网模拟器中电池存储的运行总量。

在遍历每一行时,我需要将前一个值添加到前surpluses一个值 ([i-1]) 的battery最大存储容量为s

surpluses通常为负数,因此通常会降至最低为 0

我需要从第二个值开始迭代,因为第一个值是 s

我创建了一个系列battery来迭代并尝试了以下

surpluses也是一个系列

for i, item in battery.iteritems()[1]:
    if (battery[i-1] + surpluses[i-1]) < 0:
        battery[i] = 0
    elif (battery[i-1] + surpluses[i-1]) > s:
        battery[i] = s
    else:
        battery[i] = battery[i - 1] + surpluses[i - 1]

因此,例如我想使用s = 5as battery[0]thenbattery[1] = battery[0] + surplus[0]等等。

surpluses
-1
-2
 1
-4

battery
5
4
2
3
0

在这种情况下,5 是最大值,0 是最小值,这就是为什么我有 if 语句来防止运行总数离开这个范围。

当前错误

if (batteryStorage[i-1] + surpluses[i-1]) < 0:
TypeError: unsupported operand type(s) for -: 'str' and 'int'

for i, item in batteryStorage.iteritems()[1]:
TypeError: 'zip' object is not subscriptable```

标签: pythonpandasnumpy

解决方案


我终于弄明白了。使用 enumerate 允许在索引 i 处引用其他系列。

for i, index in enumerate(batteryStorage, start=1):
    if i > len(batteryStorage) - 1:
        break
    elif (batteryStorage[i - 1] + surpluses[i - 1]) < 0:
        batteryStorage[i] = 0
    elif (batteryStorage[i - 1] + surpluses[i - 1]) > inp.batteryStorage:
        batteryStorage[i] = inp.batteryStorage
    else:
        batteryStorage[i] = round(batteryStorage[i - 1] + surpluses[i - 1],0)

推荐阅读