我的数据框有3座建筑物,以kW为单位的电动汽车需求。 每个建筑物最多只能以11 kW的功率充电,因此,如果需求更高(例如13 kWh),则下一小时的值必须加上13-11 = 2。
为了更加清楚,数据框看起来像这样,我想这样变换它:
bd1 bd2 bd3 bd1 bd2 bd3
0 11 9 7 0 11 9 7
1 15 6 14 1 11 6 11
2 8 12 13 -> 2 11 11 11
3 2 0 0 3 3 1 5
... ...
8759 8 7 12 8759 8 7 11
我无法将盈余添加到最后一行,因此其余的应该删除。
答案 0 :(得分:0)
一些初步任务:
max_charge = 11
to_add = np.zeros(len(df.columns), dtype=np.int64)
maxs = to_add + max_charge
result = []
对每行进行向前调整:
for r in df.values:
row = r + to_add
to_add = np.where(row > max_charge, row - max_charge, 0)
row = np.minimum(row, maxs)
result.append(row)
合并结果并覆盖最后一行:
df2 = pd.DataFrame(np.array(result), columns=df.columns)
df2.iloc[-1] = df.iloc[-1]
这是我最后得到的内容:
In [6]: df
Out[6]:
bd1 bd2 bd3
0 11 9 7
1 15 6 14
2 8 12 13
3 2 0 0
4 8 7 12
In [7]: df2
Out[7]:
bd1 bd2 bd3
0 11 9 7
1 11 6 11
2 11 11 11
3 3 1 5
4 8 7 12