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

如何统计DataFrame列中指定颜色及其相似色的出现次数?

问题描述

给定颜色映射字典all_colors(键为主颜色名,值为对应相似色列表),以及包含market_color列的Pandas DataFrame,需要统计每个主颜色及其相似色在market_color列中的总出现次数,最终得到结果字典all_colors_frequencies={'red':5,'yellow':2}。

相关代码定义:

all_colors = {
    'red': ['coral','burgundy'],
    'yellow':['mustard','lemon']
}

import pandas as pd
df = pd.DataFrame(
    {'market_color': ['red',
                      'coral',
                      'burgundy',
                      'light red',
                      'mustard',
                      'lemon',
                      'red'],
     'color_id': [1, 2, 3, 4, 5, 6, 7]})
实现方案

方法一:直接遍历统计

遍历颜色字典,针对每个主颜色,组合主色与相似色的列表,用Pandas的isin()方法筛选匹配行并统计数量:

all_colors_frequencies = {}
for main_color, similar_colors in all_colors.items():
    # 合并主色和相似色为目标列表
    target_colors = [main_color] + similar_colors
    # 统计匹配的行数(布尔值求和:True=1,False=0)
    count = df['market_color'].isin(target_colors).sum()
    all_colors_frequencies[main_color] = count

print(all_colors_frequencies)  # 输出: {'red':5, 'yellow':2}

方法二:反向映射后统计

先构建所有颜色到主色的反向映射,替换DataFrame中的颜色值后,用value_counts()直接统计:

# 构建反向映射:所有相关颜色对应到主色
color_mapping = {}
for main_color, similar_colors in all_colors.items():
    color_mapping[main_color] = main_color
    for color in similar_colors:
        color_mapping[color] = main_color

# 将market_color转换为主色,无法匹配的设为NaN
df['main_color'] = df['market_color'].map(color_mapping)

# 统计各主色出现次数并转为字典
all_colors_frequencies = df['main_color'].value_counts().to_dict()

print(all_colors_frequencies)  # 输出: {'red':5, 'yellow':2}

内容的提问来源于stack exchange,提问作者Адиль Акавов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:25:24