You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按条件填充Pandas DataFrame:行中出现0.00后后续值置0

解决方案:按条件填充Pandas DataFrame

问题描述

现有如下DataFrame:

012345
0.320.400.601.203.400.00
0.170.120.001.302.420.00
0.310.900.801.244.350.00
0.390.000.901.501.400.00

需求:若某行中出现0.00,将该行从第一个0.00出现的位置到末尾的所有值置为0.00,处理后结果如下:

012345
0.320.400.601.203.400.00
0.170.120.000.000.000.00
0.310.900.801.244.350.00
0.390.000.000.000.000.00

可行代码实现

利用Pandas向量化操作,无需循环即可高效完成需求:

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame([
    [0.32, 0.40, 0.60, 1.20, 3.40, 0.00],
    [0.17, 0.12, 0.00, 1.30, 2.42, 0.00],
    [0.31, 0.90, 0.80, 1.24, 4.35, 0.00],
    [0.39, 0.00, 0.90, 1.50, 1.40, 0.00]
])

# 生成掩码:标记哪些位置需要保留原值
mask = df.ne(0).astype(int).cumprod(axis=1)
# 掩码与原数据相乘,得到目标结果
result = df * mask

print(result)

代码逻辑说明

  1. df.ne(0):判断每个元素是否非0,返回布尔值DataFrame
  2. .astype(int):将布尔值转为整数(True→1,False→0)
  3. .cumprod(axis=1):对每行做累积乘积,第一个0出现的位置及之后的所有值都会变为0(0乘以任何数都是0)
  4. 原DataFrame与掩码相乘,保留第一个0之前的原值,之后的全部置0

原代码问题分析

你之前尝试的循环代码存在逻辑缺陷:

  • 仅通过前一列是否为0来设置当前列,没有覆盖“第一个0之后所有列都置0”的需求
  • 循环范围range(1,T-1)未处理完整的行和列,无法实现全局条件判断

内容的提问来源于stack exchange,提问作者Boom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:30:53