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

在Pandas DataFrame中按指定列序列匹配行并提取值

解决方案

要实现适配列名和列数量变化的通用匹配方案,核心是动态生成目标列名并批量验证行匹配,具体步骤如下:

  1. 动态生成目标列名
    根据输入的in_列表,用列表推导式生成对应DataFrame列名,比如in_=[2,3]会生成['A2','A3']:
cols = [f'A{i}' for i in in_]
  1. 生成批量匹配掩码
    利用pandas的eq()方法批量对比目标列与li的对应值,再通过all(axis=1)判断每行是否所有列都匹配成功:
mask = df[cols].eq(li).all(axis=1)
  1. 提取匹配结果
    用掩码筛选出匹配行,直接获取索引和A1列的值:
# 获取匹配行索引(多行匹配时返回索引数组)
matched_indexes = df[mask].index
# 获取匹配行的A1列值(多行匹配时返回Series)
a1_values = df.loc[mask, 'A1']

完整示例验证

用你提供的示例DataFrame测试:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]],
                   columns=['A1', 'A2', 'A3'])

# 可变输入参数
in_ = [2, 3]
li = [5, 6]

# 执行匹配逻辑
cols = [f'A{i}' for i in in_]
mask = df[cols].eq(li).all(axis=1)

matched_indexes = df[mask].index
a1_values = df.loc[mask, 'A1']

print(f"匹配行索引:{matched_indexes.tolist()}")
print(f"A1列对应值:{a1_values.tolist()}")

输出结果:

匹配行索引:[1]
A1列对应值:[4]

边界情况处理

如果担心无匹配行导致报错,可添加判断逻辑:

if mask.any():
    matched_indexes = df[mask].index
    a1_values = df.loc[mask, 'A1']
else:
    print("未找到匹配行")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:25:01