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

如何根据Pandas DataFrame列值匹配字典值并返回对应键?

Pandas根据DataFrame列值匹配字典取值返回对应键的方法

问题描述

现有如下DataFrame和字典,需要新增col3列,根据col1的值是否存在于字典的取值列表中,返回对应的字典键(odd或even):

示例代码:

import pandas as pd
import numpy as np

df = pd.DataFrame({"col1": [1,2,3,4,5], "col2": [6,7,8,9,10]})
d = {"odd": [1,3,5,7,9], "even": [2,4,6,8,10]}
# 原尝试写法有误,需修正
# df["col3"] = np.where(df["col1"].isin(d.values), d.key, "") # ???

期望得到的结果:

col1  col2  col3
0     1     6   odd
1     2     7  even
2     3     8   odd
3     4     9  even
4     5    10   odd

解决方案

方法1:构建反向映射字典(推荐,效率最高)

原字典是键→列表的结构,先转换成单个值→键的反向映射字典,再用map方法快速匹配:

# 构建值到键的反向映射
value_to_key = {}
for key, values in d.items():
    for val in values:
        value_to_key[val] = key

# 生成col3列
df["col3"] = df["col1"].map(value_to_key)

该方法通过一次遍历构建映射,后续map操作为矢量化处理,适合大数据量场景。

方法2:使用apply函数(灵活但效率较低)

通过apply对col1的每个值遍历字典,匹配对应的键,适合数据量较小的场景:

# 用lambda结合next获取匹配键,未匹配则返回空字符串
df["col3"] = df["col1"].apply(lambda x: next((k for k, v in d.items() if x in v), ""))

方法3:嵌套np.where(适合字典键数量少的情况)

如果字典的键不多,可直接嵌套np.where逐个判断:

df["col3"] = np.where(df["col1"].isin(d["odd"]), "odd", 
                      np.where(df["col1"].isin(d["even"]), "even", ""))

该写法直观,但键数量多时会变得冗长。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:45:32