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

Pandas中如何仅对State为California的行映射字典值?

解决仅对指定条件的DataFrame列进行值映射的问题

原始数据

DataFrame:

State   City
0  California      1
1  California      2
2    Lousiana      1
3    Virginia      2

映射字典:

dic = {1: 'LA', 2: 'SF'}  # 注意:LA和SF需用字符串引号包裹,否则会报未定义错误

需求

仅当State列值为California时,用上述字典对City列做值映射,其他行保留原City值。

原代码问题分析

你之前写的代码:

df['City'] = df['City'].where(df['State']=='California').map(dic)

问题在于df['City'].where(df['State']=='California')会把所有State不等于California的行的City值替换为NaN,后续map操作无法将NaN转换回原始值,最终导致非目标行的City变成NaN。

正确解法

方法1:使用loc定位目标行(推荐,效率高)

通过loc精准定位符合条件的行,仅对这些行的City列执行映射:

df.loc[df['State'] == 'California', 'City'] = df.loc[df['State'] == 'California', 'City'].map(dic)

方法2:使用np.where条件赋值

利用numpy.where实现"条件满足则映射,否则保留原值"的逻辑:

import numpy as np
df['City'] = np.where(df['State'] == 'California', df['City'].map(dic), df['City'])

方法3:使用apply逐行处理

适合逻辑复杂的场景,逐行判断并赋值:

df['City'] = df.apply(lambda row: dic[row['City']] if row['State'] == 'California' else row['City'], axis=1)

执行结果

三种方法都能得到预期结果:

State   City
0  California     LA
1  California     SF
2    Lousiana      1
3    Virginia      2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:35:29