在特定条件下从数据帧中减去值,并将其余值加到下一个值

时间:2018-08-23 15:14:44

标签: python pandas dataframe

我的数据框有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

我无法将盈余添加到最后一行,因此其余的应该删除。

1 个答案:

答案 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