如何基于多条件替换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)
常见失效原因排查
- 未赋值回原列:
df.apply(...)不会直接修改原DataFrame,必须把结果赋值给df['level_2'] axis参数错误:默认axis=0是按列处理,需要设置axis=1按行遍历- 函数逻辑遗漏:没有处理不满足条件的情况,导致返回
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
相关产品推荐
相关产品推荐

