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

如何基于多条件替换Pandas列中的字符串值?

Pandas DataFrame 条件字符串替换解决方案

推荐方案:使用loc条件索引(高效向量化操作)

这种方法比apply更高效,适合大规模数据处理,直接定位满足条件的行并修改对应列的值:

import pandas as pd

# 构造示例数据(替换成你的实际DataFrame)
df = pd.DataFrame({
    'level_1': ['a', 'b', 'b', 'c', 'b'],
    'level_2': ['pe60', 'pe60', 'pe70', 'pe70', 'pe80']
})

# 执行替换
df.loc[(df['level_1'] == 'b') & (df['level_2'] == 'pe60'), 'level_2'] = 'pe61'
df.loc[(df['level_1'] == 'b') & (df['level_2'] == 'pe70'), 'level_2'] = 'pe71'

处理后结果:

level_1 level_2
0       a    pe60
1       b    pe61
2       b    pe71
3       c    pe70
4       b    pe80

若坚持使用apply,修正后的写法

如果之前用apply未生效,大概率是未将结果赋值回原列或函数逻辑有遗漏。正确写法如下:

def update_level2(row):
    # 仅当level_1为"b"时判断替换规则
    if row['level_1'] == 'b':
        if row['level_2'] == 'pe60':
            return 'pe61'
        elif row['level_2'] == 'pe70':
            return 'pe71'
    # 其他情况返回原值
    return row['level_2']

# 必须将apply结果赋值回level_2列
df['level_2'] = df.apply(update_level2, axis=1)

常见失效原因排查

  1. 未赋值回原列:df.apply(...)不会直接修改原DataFrame,必须把结果赋值给df['level_2']
  2. axis参数错误:默认axis=0是按列处理,需要设置axis=1按行遍历
  3. 函数逻辑遗漏:没有处理不满足条件的情况,导致返回None覆盖原数据

另一种简化方案:结合replace与条件掩码

如果替换规则较多,可以用字典映射+条件筛选批量处理:

replace_rules = {'pe60': 'pe61', 'pe70': 'pe71'}
# 筛选level_1为"b"的行
mask = df['level_1'] == 'b'
# 对筛选后的行执行替换
df.loc[mask, 'level_2'] = df.loc[mask, 'level_2'].replace(replace_rules)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:40:19