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

如何在Pandas中用多个值替换相同数据?现有方法失效求方案

问题:将DataFrame中重复的'High'替换为不同值('H'、'Hi')

原始DataFrame定义:

import pandas as pd
df = pd.DataFrame({'names': ['Fenellas', 'Steve', 'Jo', 'Stephen', 'Lili'],
                   'grade': ['High', 'High', 'Low', 'High', 'Medium']})

用户尝试以下两种replace方法均未达到预期效果:

# 方法1:无法按预期分配多个替换值
df = df.replace(to_replace='High', value=['H','Hi'])
# 方法2:仅替换第一个匹配项,剩余'High'未处理
df = df.replace(to_replace='High', value='H', limit=1)

期望最终输出:

names     grade 
Fenellas  H
Steve     Hi
Jo        Low
Stephen   Hi
Lili      Medium 

可行解决方案

方法1:定位索引后批量赋值

先筛选出所有grade为High的行索引,再根据位置生成对应的替换值列表,最后直接赋值:

# 获取所有grade为High的行索引
high_rows = df[df['grade'] == 'High'].index

# 生成替换值:第一个High替换为'H',其余替换为'Hi'
replace_list = ['H'] + ['Hi'] * (len(high_rows) - 1)

# 执行替换
df.loc[high_rows, 'grade'] = replace_list

方法2:利用分组计数动态替换

通过groupby.cumcount()统计每个High的出现顺序,再根据顺序分配替换值:

# 对grade列中等于'High'的项,按出现顺序替换
df['grade'] = df['grade'].mask(
    df['grade'] == 'High',
    df.groupby('grade').cumcount().map(lambda x: 'H' if x == 0 else 'Hi')
)

原方法无效原因说明

  • 第一种replace用法中,当value传入列表时,to_replace需要是同长度的匹配列表或映射字典,无法直接将单个匹配值映射到多值循环分配。
  • 第二种replace的limit参数仅控制全局替换的总次数,默认按列处理,只会替换第一个High,剩余匹配项不会被替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:15:44