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

如何用Pandas搜索整个DataFrame并返回匹配项的相邻值?

问题描述

我有如下样本数据集:

Protocol Number:    xx-yzm2 
        
Section Major       Task                        Budget
1                   Study Setup                 25303.18
2                   Study Setup Per-Location    110037.8
3                   Site Identified by CRO      29966.25
4                   Pre-study Site Visit (PSSV) 130525.92

我希望使用contains方法搜索整个DataFrame,传入关键词protocol并返回其相邻的值。由于表格结构可能发生变化,无法按列筛选,请问能否通过Pandas实现该需求?输入关键词为protocol时,期望输出为xx-yzm2。

解决方案

可以实现,核心思路是把整个DataFrame转为一维序列,忽略原有表格结构,找到匹配关键词的位置后直接取相邻元素。具体代码如下:

import pandas as pd

# 构造示例DataFrame(如果是从文件读取,可替换为pd.read_csv/pd.read_table等方法)
data = [
    ["Protocol Number:", "xx-yzm2", ""],
    ["", "", ""],
    ["Section Major", "Task", "Budget"],
    [1, "Study Setup", 25303.18],
    [2, "Study Setup Per-Location", 110037.8],
    [3, "Site Identified by CRO", 29966.25],
    [4, "Pre-study Site Visit (PSSV)", 130525.92]
]
df = pd.DataFrame(data)

# 将二维DataFlatten转为一维序列,保留元素顺序
flat_series = df.stack().reset_index(drop=True)

# 定位包含关键词的元素索引(不区分大小写,跳过空值)
match_index = flat_series[flat_series.str.contains('protocol', case=False, na=False)].index[0]

# 获取相邻右侧的目标值
result = flat_series[match_index + 1]
print(result)  # 输出:xx-yzm2

关键细节说明

  • stack()方法会把DataFrame的所有行、列元素按顺序压成一维序列,彻底摆脱原表格结构限制;
  • str.contains参数case=False实现不区分大小写搜索,na=False避免空值匹配报错;
  • 如果关键词和目标值是上下相邻(而非左右),只需把match_index + 1替换为match_index + df.shape[1](每一行的元素数量等于列数,下一行元素的索引为当前索引加列数)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:54:37