如何在Pandas DataFrame中通过姓名查询对应attempts值?
实现按姓名查询attempts的功能
假设你的现有代码包含占位符,以下是填充后的完整实现,同时加入了异常处理避免无匹配时出错:
完整代码示例
import pandas as pd # 示例DataFrame(根据你的实际数据替换) data = { 'first_name': ['John', 'Emily', 'Michael'], 'last_name': ['Doe', 'Bell', 'Smith'], 'attempts': [2, 3, 1] } df = pd.DataFrame(data) def get_attempts(first_name, last_name): # 1. 生成布尔掩码,筛选同时匹配名和姓的行 mask = (df['first_name'] == first_name) & (df['last_name'] == last_name) matched_rows = df[mask] # 2. 处理匹配结果 if not matched_rows.empty: # 提取匹配行的attempts值(假设姓名组合唯一) attempts_value = matched_rows['attempts'].iloc[0] return f"attempts: {attempts_value}" else: return "No matching record found" # 测试调用 print(get_attempts('Emily', 'Bell')) # 输出: attempts: 3 print(get_attempts('Jane', 'Doe')) # 输出: No matching record found
关键代码解释
- 布尔掩码筛选:用
&连接两个条件(必须用括号包裹单个条件),精准定位同时匹配名和姓的行 - 空结果处理:通过
matched_rows.empty判断是否存在匹配记录,避免直接取iloc[0]时触发索引越界错误 - 值提取:使用
.iloc[0]提取第一行的attempts值,适用于姓名组合唯一的场景
可选优化
- 不区分大小写匹配:如果需要忽略大小写差异,把条件改成:
mask = (df['first_name'].str.lower() == first_name.lower()) & (df['last_name'].str.lower() == last_name.lower()) - 处理重复姓名:如果DataFrame中存在重复的姓名组合,可以根据需求调整,比如返回所有attempts值:
return f"attempts: {list(matched_rows['attempts'])}"
内容的提问来源于stack exchange,提问作者oksothisiswhatyouhavetodo
相关产品推荐
相关产品推荐

