【发布时间】:2020-08-08 09:51:04
【问题描述】:
我有一个重新采样的 df:
Timestamp Loading Power Energy ID status
2020-04-09 06:45:00 1.0 1000 5000 1 on
2020-04-09 06:46:00 1.0 1000 5500 1 on
2020-04-09 06:47:00 NaN NaN NaN NaN NaN
2020-04-09 06:48:00 NaN NaN NaN NaN NaN
2020-04-09 06:49:00 1.0 5 0 1 off
2020-04-09 06:50:00 1.0 3000 200 2 on
...
第一件事:df['Loading'] 最初是 'boolean' 类型,没有数字(1 或 0) - 我该如何更改?
df['status'] 列的 NaN 值应该简单地继续(最后一个条目是打开的,然后应该用打开填充这些行直到关闭)。
现在其他列的其他行应该填充不同的,这取决于状态是打开还是关闭:
status == on: loading = 'true';能量 = 最后一个现有条目; power = 最后一个现有条目; id == 最后一个现有条目
status == off: loading = 'false';能量 = 0;功率 = 0; Id = '无 ID'。
我尝试过类似的方法:
cond = (df2['Status'] != df2['Status'].shift(-1)) | (df2['Status'].notna())
df2.loc[cond] = df2.loc[cond].ffill()
没有成功...
预期结果:
Timestamp Loading Power Energy ID status
2020-04-09 06:45:00 True 1000 5000 1 on
2020-04-09 06:46:00 True 1000 5500 1 on
2020-04-09 06:47:00 True 1000 5500 1 on
2020-04-09 06:48:00 True 1000 5500 1 on
2020-04-09 06:49:00 False 5 0 no Id off
2020-04-09 06:49:00 True 3000 200 2 on
...
编辑 填充 nan 值的条件比预期的要复杂:我有不同的周期,它们由不同的 ID 标记。在一个周期内(ID 出现在 nan 值之前和之后),两条“周围”线的功率应该被平均,并且在列能量中应该输入列能量的最后一个现有值。在循环之外(ID 之前!= 下一个 ID),功率和能量应设置为 0。
【问题讨论】: