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

Pandas按name分组将指定值替换为对应分组众数的实现方法

按分组众数替换指定无效值的Pandas实现

实现思路

  • 先按name列分组,计算每个分组下value列的众数,建立分组名到众数的映射关系
  • 判断value属于待替换列表的记录,将其值替换为对应分组的众数,非目标值保持原样
  • 众数可能存在多值情况,默认取第一个返回的众数即可适配当前示例场景,可按需调整取值规则

完整可运行代码

import pandas as pd

# 1. 构造示例数据集
df = pd.DataFrame({
    'year': [2000, 2001, 2002, 2003, 2000, 2001, 2002, 2003],
    'name': ['Mick']*4 + ['Jane']*4,
    'value': ['a', 'a', 'ab', 'b', 'c', 'c', 'cd', 'd']
})
values_i_do_not_want = ['ab', 'cd']

# 2. 计算每个name分组对应的value众数,生成映射字典
group_mode_map = df.groupby('name')['value'].agg(
    # 若存在多个并列众数,取第一个,可按需修改取值逻辑
    lambda x: x.mode().iloc[0]
).to_dict()

# 3. 条件替换:仅替换待替换列表内的值,其余保留原值
# 小数据集写法,逻辑直观
df['value'] = df.apply(
    lambda row: group_mode_map[row['name']] if row['value'] in values_i_do_not_want else row['value'],
    axis=1
)

# --- 大数据量优先用向量化写法,性能更高 ---
# df['ref_mode'] = df['name'].map(group_mode_map)
# df['value'] = df['value'].mask(df['value'].isin(values_i_do_not_want), df['ref_mode'])
# df = df.drop(columns='ref_mode')

运行结果验证

执行代码后输出的DataFrame完全匹配预期:

  • Mick分组2002年的ab被替换为分组众数a
  • Jane分组2002年的cd被替换为分组众数c
  • 其余所有非待替换列表内的值均保持不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:15:36