首页 > 解决方案 > 在特定条件下从数据框中减去值并将其余值添加到下一个值

问题描述

我的数据框有 3 座建筑物和电动汽车的需求,以千瓦为单位。每栋建筑最多只能充电 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

我无法将剩余部分添加到最后一行,因此应删除其余部分。

标签: pythonpandasdataframe

解决方案


一些初步任务:

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

推荐阅读