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

如何定位dataframe中任意含'temp'字段列值为1对应的行索引?

问题原因

你的代码存在两个核心问题:

  • 缺少行维度的条件聚合:df[columns]==1返回的是和筛选出的temp列同维度的布尔矩阵,np.where()[0]会返回所有值为1的单元格对应的行位置,某行只要有多个temp列等于1,行号就会重复返回;如果你的数据绝大多数行都至少有一个temp列等于1,就会出现看起来返回了所有行的问题
  • 取到的是行位置而非实际索引:如果你的DataFrame没有使用默认的0起始连续整数索引,np.where()[0]得到的是行的顺序位置编号,和DataFrame实际存储的index值不匹配
正确实现

推荐直接用pandas内置方法实现,逻辑更清晰也不容易出错:

# 筛选所有列名含temp的列
temp_cols = df.columns[df.columns.str.contains('temp')]
# 按行判断是否存在任意一列等于1,直接取对应行的实际索引
target_indices = df[df[temp_cols].eq(1).any(axis=1)].index.tolist()

如果要基于你的numpy写法调整,需要先按行聚合条件再取索引:

columns = [col for col in df.columns if 'temp' in col]
# 先按行判断是否有至少一个符合条件的值,得到一维布尔掩码
row_mask = (df[columns] == 1).any(axis=1).values
# 基于掩码取对应的实际行索引
indices = df.index[np.where(row_mask)[0]].tolist()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 15:18:03