Pandas使用np.where替换列0值为前非0值时末尾0未处理问题咨询
问题原因
你写的np.where是向量化批量运算,不会逐行更新计算结果:调用data['OI_C_1'].shift()时,获取的是替换前原始列的移位结果,第99行对应的移位值是原始第98行的0,所以自然无法完成替换。
最优解决方案
Pandas自带的前向填充逻辑直接匹配你的需求,先把0替换为空值,再用最近的非空值填充即可:
import pandas as pd # 方法1:replace+ffill data['OI_C_1'] = data['OI_C_1'].replace(0, pd.NA).ffill() # 方法2:mask+ffill(效果一致,写法不同) # data['OI_C_1'] = data['OI_C_1'].mask(data['OI_C_1'] == 0).ffill()
执行效果说明
以你给出的末尾几行为例:
- 先把第98、99行的0替换为
pd.NA ffill()执行时会逐行识别空值:- 第98行的空值用上一行(97行)的
176430填充 - 第99行的空值用刚填充完成的第98行的
176430填充
完全符合你要把所有0替换为上一个非0值的需求,性能远高于手动逐行循环。
- 第98行的空值用上一行(97行)的
内容的提问来源于stack exchange,提问作者younggotti
相关产品推荐
相关产品推荐

