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

如何用字典根据另一列值替换DataFrame某列的值

基于Country列替换Region缺失值并保留已有数据

问题背景

给定映射字典:

region_rename = {"Gambia": "Sub-Saharan Africa", "North Macedonia": "Central and Eastern Europe"}

DataFrame data_2019 初始数据:

CountryRegionGDP
GambiaNaN200
North MacedoniaNaN300
USANorth America400

期望输出:

CountryRegionGDP
GambiaSub-Saharan Africa100
North MacedoniaCentral and Eastern Europe200
USANorth America300

核心需求:根据Country列的值用字典替换Region列的缺失值,同时保留已有正确地区的数据。

尝试过的错误代码及问题

  1. 返回布尔值,无法完成赋值:
data_2019["Region"] = [data_2019.loc[data_2019["Country or region"] == r, "Region"] == region_rename[r] for r in region_rename]
  1. 逻辑错误,提示输出歧义:
sample["Region"] = sample["Region"].apply([lambda r: region_rename[r] if sample["Region"] == r else "" for r in region_rename])
  1. 覆盖已有正确地区数据,导致非目标国家Region变为NaN:
sample["Region"] = sample["Country or region"].map(region_rename)

正确解决方案

方法1:fillna结合map(推荐)

利用map根据Country列生成对应地区,再用fillna仅填充Region列的缺失值,已有值保持不变:

data_2019["Region"] = data_2019["Region"].fillna(data_2019["Country"].map(region_rename))

方法2:loc精准定位赋值

先筛选出Region为NaN且Country在字典中的行,再针对性赋值:

mask = data_2019["Region"].isna() & data_2019["Country"].isin(region_rename.keys())
data_2019.loc[mask, "Region"] = data_2019.loc[mask, "Country"].map(region_rename)

方法3:if-then语句(适合字典条目较少时)

因为字典仅包含两个国家,可直接逐个判断赋值:

# 填充Gambia的Region缺失值
data_2019.loc[(data_2019["Country"] == "Gambia") & (data_2019["Region"].isna()), "Region"] = "Sub-Saharan Africa"
# 填充North Macedonia的Region缺失值
data_2019.loc[(data_2019["Country"] == "North Macedonia") & (data_2019["Region"].isna()), "Region"] = "Central and Eastern Europe"

以上三种方法均可实现需求:仅填充Region列的缺失值,同时保留USA等已有正确地区的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:40:25