You need to enable JavaScript to run this app. pandas如何查找指定行(索引d)值为0的对应列并输出全量数据
优惠活动
大模型
产品
解决方案
定价
更多

pandas如何查找指定行(索引d)值为0的对应列并输出全量数据

Pandas按指定行的零值筛选对应列方法

实现该需求不需要逐列循环遍历,核心逻辑是先生成列维度的布尔筛选掩码,再用掩码提取所有符合条件的列、保留全部行数据,筛选过程只参考指定行的列值,不影响其他行的数据保留状态。

可直接运行的实现步骤

  1. 首先复现你的原始DataFrame结构

    import pandas as pd
    
    # 构造和示例一致的原始数据
    data = {
        "col_A": [12, 23, 34, 12],
        "col_B": [15, 37, 32, 0],
        "col_C": [28, 46, 24, 1],
        "col_D": [34, 34, 93, 0],
        "col_E": [23, 92, 12, 0]
    }
    df = pd.DataFrame(data, index=["a", "b", "c", "d"])
    
  2. 生成筛选掩码:定位索引为d的整行,逐列判断值是否等于0

    # 得到的col_mask是布尔Series,值为True的列就是需要保留的列
    col_mask = df.loc["d"] == 0
    
  3. 用掩码完成列维度筛选,保留所有行

    result = df.loc[:, col_mask]
    

运行结果

执行完上述代码后,result的结构和你预期的输出完全一致:

col_B  col_D  col_E
a     15     34     23
b     37     34     92
c     32     93     12
d      0      0      0

常见适配场景

  • 如果行标识不是pandas自带的行索引,而是存储在普通列中(比如有个叫row_id的列存了a/b/c/d的标识),只需要调整掩码的生成逻辑:先定位到标识为d的行,再做零值判断即可,代码为col_mask = df.loc[df["row_id"] == "d"].squeeze() == 0,后续筛选逻辑保持不变。
  • 该方法是通用模式:不管筛选条件是零值、大于阈值还是其他判断规则,只需要替换掩码生成时的判断表达式即可,不需要改动筛选的核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 17:27:03