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

如何通过元组索引匹配字典为Pandas DataFrame新增列

解决Pandas DataFrame匹配元组键字典添加Owner列的问题

你的代码失败的核心原因是:dogOwners的键是**('Dog Name', 'Dog Type')元组**,但你只传入了单个Dog Name字符串去匹配,自然找不到对应值。下面提供两种可行方案:

方案一:直接基于现有字典匹配

利用apply同时提取每行的Dog Name和Dog Type组成元组,作为键去查询字典中的Owner信息:

dogsDF['Owner'] = dogsDF.apply(
    lambda row: dogOwners.get((row['Dog Name'], row['Dog Type']), {}).get('Owner', ''),
    axis=1
)
  • 先通过元组键获取对应狗狗的嵌套字典,再从中提取Owner字段
  • 两次get分别处理“元组键不存在”和“嵌套字典无Owner字段”的情况,默认返回空字符串

方案二:调整字典格式提升查询效率

如果需要多次查询,建议先重构字典,简化后续匹配逻辑:

子方案2.1:提取Owner到独立字典(保留元组键)

# 从原字典中提取Owner,生成新的键值对字典
owner_map = {dog_key: details['Owner'] for dog_key, details in dogOwners.items()}
# 直接匹配元组键
dogsDF['Owner'] = dogsDF.apply(
    lambda row: owner_map.get((row['Dog Name'], row['Dog Type']), ''),
    axis=1
)

子方案2.2:改为单键字典(仅当Dog Name唯一时适用)

如果你的数据中Dog Name是唯一标识(不存在同名不同类型的狗狗),可以把字典改成以Dog Name为键:

owner_map_single = {dog_key[0]: details['Owner'] for dog_key, details in dogOwners.items()}
# 直接用map匹配,效率比apply更高
dogsDF['Owner'] = dogsDF['Dog Name'].map(owner_map_single).fillna('')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:12:05