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

如何对比字典值与Pandas DataFrame?匹配科目值返回对应姓名

解决方法:匹配DataFrame与字典多列值并返回对应姓名

嘿,这个需求很容易实现,用pandas的筛选功能就能搞定。我给你两种实用的写法,你可以根据场景选择:

方法一:灵活适配多列的通用写法

这种方法适合当你有很多科目需要匹配时,不用逐个写条件,直接利用字典和DataFrame的列匹配:

import pandas as pd

# 初始化你的DataFrame和字典
df = pd.DataFrame({
    '姓名': ['James', 'Tom', 'Jerry'],
    'math': [80, 60, 90],
    'physic': [90, 70, 60]
})
data = {'math': 60, 'physic': 70}

# 生成匹配条件:检查每行的math和physic是否同时等于字典对应值
match_mask = df[['math', 'physic']].eq(pd.Series(data)).all(axis=1)

# 提取符合条件的姓名
target_name = df.loc[match_mask, '姓名'].values[0]
print(target_name)  # 输出:Tom

代码解释:

  • df[['math', 'physic']].eq(pd.Series(data)):把字典转成Series,和DataFrame的对应列做元素级比较,返回一个布尔值的DataFrame(每个位置表示该单元格是否匹配字典值)
  • .all(axis=1):检查每行的所有条件(这里是math和physic两列)是否都为True,得到一个布尔Series,标记哪些行符合要求
  • df.loc[match_mask, '姓名']:筛选出符合条件的行,提取姓名列,values[0]取出第一个匹配结果(如果有多个匹配项,去掉[0]会得到一个包含所有匹配姓名的数组)

方法二:直观的逻辑与写法

如果你的匹配列很少(只有math和physic),这种写法更直接易懂:

import pandas as pd

df = pd.DataFrame({
    '姓名': ['James', 'Tom', 'Jerry'],
    'math': [80, 60, 90],
    'physic': [90, 70, 60]
})
data = {'math': 60, 'physic': 70}

# 直接用逻辑与连接两个条件
target_name = df[(df['math'] == data['math']) & (df['physic'] == data['physic'])]['姓名'].values[0]
print(target_name)  # 输出:Tom

这种写法把每个列的匹配条件明确写出来,逻辑清晰,适合列数少的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:22:24