python - 在特定条件下从数据框中减去值并将其余值添加到下一个值
问题描述
我的数据框有 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
我无法将剩余部分添加到最后一行,因此应删除其余部分。
解决方案
一些初步任务:
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
推荐阅读
- php - 如何更改 PHPSpreadsheet 中的日期时间格式?
- javascript - 使用动态值重命名对象根
- r - 标记出现在一个向量中但不在另一个向量中的字符串 (R)
- vb.net - 我正在尝试使用多线程读取所有带有 2 个线程的行以获取不同的文本而不是相同的文本?
- python - 从我的驱动器中选择的文件夹列表创建子文件夹
- ios - 无法从 AppDelegate 导航到 UIViewController
- scala - Spark:从窗口获取行值
- d3.js - 如何在 D3/dagre-D3/javascript 中创建决策树/流程图?
- python - 使用 Cython 向 Python 公开具有继承的 C++ 类时如何避免基类重新定义
- angular - 是否可以使用高图从左到右创建网络图作为树图?