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

如何为Pandas DataFrame生成基于字典匹配或值重复的布尔新列?

为DataFrame新增布尔列:匹配字典键或判断值是否多实例

需求说明

需要为Pandas DataFrame新增一列布尔值数据,有两种实现路径:

  • 路径1:基于给定字典的键匹配——当DataFrame某列的值与字典的键一致时,新列值为True,否则为False
  • 路径2:跳过字典,直接判断列值是否存在多个实例——比如示例中dog和bird出现多次,对应True,其余值为False

示例数据

import pandas as pd

animal_list = ['dog', 'cat', 'dog', 'fish', 'bird', 'dog', 'bug', 'bird', 'snake']
animal_dict = {'dog': [3], 'bird': [2]}

animals = pd.DataFrame(animal_list, columns=['Pets'])

解决方案

你最终采用的方法(基于map优化)

原本使用apply方法,后改用map提升效率,通过自定义函数匹配字典键:

def find_key(find_value):
    for k, v in animal_dict.items():
        if k == find_value:
            return True
    return False

animals['multiple'] = animals['Pets'].map(find_key)

更简洁的优化方案

不用自定义循环函数,Pandas内置方法可以更高效地实现需求:

路径1:匹配字典键

# 直接提取字典的键,用isin完成判断
animals['multiple'] = animals['Pets'].isin(animal_dict.keys())

路径2:判断值是否存在多个实例

先统计每个值的出现次数,再筛选出次数大于1的目标值:

# 统计各Pets值的出现频次
counts = animals['Pets'].value_counts()
# 匹配出现次数>1的值
animals['multiple'] = animals['Pets'].isin(counts[counts > 1].index)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:06:02