Pandas中非迭代填充Order_Price非零值至后续行的方法
Pandas非零值向下填充解决方案
直接用Pandas的矢量化操作就能实现,完全不需要迭代DataFrame,步骤如下:
- 先将
Order_Price中的0值替换为NaN,再使用向前填充(ffill)方法,把非零值向下填充到下一个非零值出现前的所有位置,最终将结果存入新增的Position_Price列。
具体代码示例:
# 方法1:使用mask替换0为NaN后向前填充 df['Position_Price'] = df['Order_Price'].mask(df['Order_Price'] == 0).ffill() # 方法2:使用where保留非零值,其余为NaN后向前填充 df['Position_Price'] = df['Order_Price'].where(df['Order_Price'] != 0).ffill()
说明
mask():将满足Order_Price == 0的元素替换为NaN,保留非零值不变;where()则相反,保留满足Order_Price != 0的元素,其余设为NaN,两者效果等价。ffill():全称forward fill,会用前一个非NaN的值填充当前的NaN位置,直到遇到下一个非NaN值为止,完美匹配你需要的“向下填充直到新非零值出现”的需求。
如果你的DataFrame开头存在连续0值,ffill()会让这些位置保留NaN,若需要填充默认值,可以在ffill()后追加.fillna(默认值)来处理。
内容的提问来源于stack exchange,提问作者Jose Martinez Sobrado
相关产品推荐
相关产品推荐

