我有一个数据帧如下。我想根据以下条件替换行值。在
如果3个连续的前一行值为0,则保持该值不变,或者如果只有一个前一行值为0,则通过对该特定IEMI的最后3行进行滚动平均来填充该行。在
首先是dataframe (df)
。在
IMEI KVA KwH Expected KVA
55647 1307.65 1020.33 1307.65
55468 2988.00 1109.05 2988.00
55647 0.00 977.87 0.00
55467 0.00 1388.25 0.00
55647 0.00 445.37 0.00
55469 1888.97 933.48 1888.97
55647 1338.65 1120.33 1338.65
55468 2088.00 1019.05 2088.00
55647 0.00 977.87 =(1307.65+0.00+1338.65)/3=882.1
55469 1455.28 1388.25 1455.28
55648 2144.38 445.37 2144.38
55469 1888.97 933.48 1888.97
请注意Expected KVA
列的计算。由于第9行的实际KVA
值为0,因此Expected KVA
的值是IEMI 55647最后三次观察(KVA
)的简单平均值。但在第3、第4和第5行,因为IEMI55647的3KVA
值为0,因此Expected KVA
值也为0。在
编辑编辑-进一步
下面是一个伪代码片段。我有reset_index
。但这可能行不通
我相信上面的代码片段可能会失败,因为我已经排序了IEMI
,因此索引被扭曲了。在
如何实现?与for
函数耦合的for
循环?有什么想法吗?在
下面是我想到的:(我用IMEI:55674添加了3行,只是为了测试)
删除一组3的连续0(无需操作)并对数据帧切片:
用}用平均值
^{pr2}$np.nan
分配剩余的0,用transform
和{那么只要}我们之前遗漏的那些:
concat
和{相关问题 更多 >
编程相关推荐