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

Pandas查找包含多个任意分布在列中的指定值的行的方法

Pandas 定位同时包含多个分散值的行索引的优化方案

问题说明

现有Pandas DataFrame,已知恰好有一行分散在不同列中包含多个指定值,需要定位该行并获取其索引。

优化解决方案

完全匹配场景(单元格值和目标值完全相等)

这是最常用的场景,直接使用Pandas向量化操作即可,写法简洁高效:

import pandas as pd
import numpy as np

# 定义要匹配的目标值集合
targets = {'hey', 'here', 'I am'}
# 筛选出包含所有目标值的行,取第一个(也是唯一的)索引
row_idx = df[df.isin(targets).sum(axis=1) == len(targets)].index[0]

逻辑说明:

  1. df.isin(targets) 返回与原DataFrame维度一致的布尔矩阵,元素为True代表该位置的值属于目标集合
  2. .sum(axis=1) 对布尔矩阵按行求和,得到每行包含目标值的总个数
  3. 筛选出行和等于目标值总数的行,即为同时包含所有目标值的行,直接取其索引即可

模糊匹配场景(单元格包含目标子串即判定命中)

如果你需要保留原实现中的模糊匹配逻辑(只要单元格包含目标子串就算匹配成功),可以使用如下写法:

target_list = ["hey", "here", "I am"]
# 逐目标生成行匹配掩码,取所有目标都匹配的行
mask = np.column_stack([df.stack().str.contains(t, na=False).unstack().any(axis=1) for t in target_list]).all(axis=1)
row_idx = df[mask].index[0]

方案优势

  • 避免了逐行遍历的iterrows操作,数据规模越大,执行效率优势越明显
  • 写法简洁符合Pandas最佳实践,可维护性高
  • 灵活可扩展,仅需修改目标集合/列表即可适配不同的匹配需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:18:01