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

如何在Pandas中为标签匹配出现次数最多的字母并添加预测列?

解决方案

首先创建示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'letter': ['a', 'b', 'c', 'a', 'a', 'c', 'b', 'a'],
    'label': [3, 2, 3, 1, 1, 3, 2, 5]
})

步骤1:统计标签与字母组合的出现频次

先按label和letter分组,统计每组的出现次数:

counts = df.groupby(['label', 'letter']).size().reset_index(name='count')

得到的频次表如下:

labellettercount
1a2
2b2
3a1
3c2
5a1

步骤2:构建标签到高频字母的映射

对每个label,筛选出出现次数最多的letter,并转为字典映射:

label_to_top_letter = counts.groupby('label').apply(
    lambda x: x.loc[x['count'].idxmax(), 'letter']
).to_dict()

生成的映射字典为:{1: 'a', 2: 'b', 3: 'c', 5: 'a'}

步骤3:生成目标列

通过map函数将每个label对应的高频字母赋值给新列label_pred:

df['label_pred'] = df['label'].map(label_to_top_letter)

最终得到的结果与需求一致:

letter  label label_pred
0      a      3          c
1      b      2          b
2      c      3          c
3      a      1          a
4      a      1          a
5      c      3          c
6      b      2          b
7      a      5          a

原代码错误原因

你之前使用的df.groupby(["letter", "label"]).count().max()逻辑偏差:

  • 按letter和label组合分组后,count()统计的是每组的行数,但后续的max()是取所有计数中的最大值(此处为2),得到的是一个单值结果,无法与原DataFrame的每行对应,因此赋值后会得到空列或全为同一值的列,完全不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:28:36