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

如何在Python/Pandas中基于表格行值进行查找匹配?

用Python/Pandas实现双维度匹配取值(对应Excel INDEX+MATCH逻辑)

需求说明

现有两个表格:

Table A

statevalue
A100

Table B

state100200
A14
B25
C36

需要为Table A新增factor字段,从Table B中匹配对应state行和对应value列的值,最终得到如下结果:

目标结果

statevaluefactor
A1001

在Excel中,对应的实现公式为:

INDEX('Table B'!B2:C4, MATCH('Table A'!A2, 'Table B'!A:A, 0), MATCH('Table A'!B2, 'Table B'!B1:C1, 0))

Pandas实现方法

方法一:转长格式后合并(通用易读)

先将宽格式的Table B转换为长格式,再通过merge按state和value双条件匹配:

import pandas as pd

# 构造示例数据
df_a = pd.DataFrame({'state': ['A'], 'value': [100]})
df_b = pd.DataFrame({'state': ['A', 'B', 'C'], 100: [1,2,3], 200: [4,5,6]})

# 将Table B转为长格式:state、value、factor
df_b_long = df_b.melt(id_vars='state', var_name='value', value_name='factor')
# 统一value字段的数据类型(Table B的列名是字符串,需转为数值)
df_b_long['value'] = df_b_long['value'].astype(int)

# 双条件合并,获取匹配的factor值
result = df_a.merge(df_b_long, on=['state', 'value'], how='left')
print(result)

方法二:使用lookup方法(高效直接)

利用lookup直接根据行标签和列标签提取对应值,适合已知行列匹配规则的场景:

import pandas as pd

df_a = pd.DataFrame({'state': ['A'], 'value': [100]})
df_b = pd.DataFrame({'state': ['A', 'B', 'C'], 100: [1,2,3], 200: [4,5,6]})

# 将Table B的索引设为state,方便按行匹配
df_b_indexed = df_b.set_index('state')

# 用lookup匹配行(state)和列(value转字符串)
df_a['factor'] = df_b_indexed.lookup(df_a['state'], df_a['value'].astype(str))
print(df_a)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:42:19