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

如何使用Pandas批量查找多行多列对应值?

问题描述

我是Python新手,有如下存储为DataFrame的表格:

Age200020102020
200.50.60.7
210.40.40.8
220.30.20.5

现有两个列表:

a = [20, 20, 21, 22]
b = [2000, 2010, 2010, 2020]

需要按[Age, 年份]的组合批量查找对应值,最终得到包含4个数值的数组。尝试过普通索引、多级索引,用.at和.loc时返回4×4表格,无法得到目标结果,求解决办法。

解决方案

方法1:用DataFrame.lookup(Pandas旧版适用)

lookup是专门按行-列对应组合取值的方法,直接传入行标签和列标签列表即可:

import pandas as pd

# 构建你的DataFrame(确保Age是索引,年份列类型和b列表一致)
df = pd.DataFrame(
    data=[[0.5, 0.6, 0.7], [0.4, 0.4, 0.8], [0.3, 0.2, 0.5]],
    index=[20, 21, 22],
    columns=[2000, 2010, 2020]
)

a = [20, 20, 21, 22]
b = [2000, 2010, 2010, 2020]

result = df.lookup(a, b)
print(result)  # 输出: array([0.5, 0.6, 0.4, 0.5])

注意:如果你的年份列是字符串类型(比如列名是'2000'),需要把b列表转成字符串格式。

方法2:转成多级索引Series后批量匹配

先将DataFrame堆叠成多级索引的Series,再用reindex匹配目标组合:

# 堆叠DataFrame,得到(index=Age, columns=年份)的多级索引Series
stacked_series = df.stack()

# 把a和b组合成元组列表
lookup_pairs = list(zip(a, b))

# 批量取值
result = stacked_series.reindex(lookup_pairs).values
print(result)  # 输出: array([0.5, 0.6, 0.4, 0.5])

方法3:Numpy向量化索引(高效)

将DataFrame转为Numpy数组,把行、列标签转换成位置索引后取值:

import numpy as np

# 获取Age对应的行位置索引
row_pos = df.index.get_indexer(a)
# 获取年份对应的列位置索引
col_pos = df.columns.get_indexer(b)

# 用Numpy数组直接按位置取值
result = df.to_numpy()[row_pos, col_pos]
print(result)  # 输出: array([0.5, 0.6, 0.4, 0.5])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:33:09