如何对比字典值与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
相关产品推荐
相关产品推荐

