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

如何用另一DataFrame字段值替换当前DataFrame指定列值?

替换DataFrame中homeground列值为对应id_city的解决方案

需求说明

将student DataFrame的homeground列值替换为hg对照表中对应的id_city,空值替换为0,最终结果匹配给定示例。

原始数据

import pandas as pd

student = pd.DataFrame({'id': [1,2,3,4,5,6,7,8,9,10],
                        'homeground': ['TOKYO','SOUTH KOREA','RIYADH','JAPAN','TOKYO','OSAKA','SAUDI ARABIA','SEOUL','','BUSAN']})

hg = pd.DataFrame({'id_country':[1,2,2,3,3,3,3],
                   'country': ['SAUDI ARABIA','SOUTH KOREA','SOUTH KOREA','JAPAN','JAPAN','JAPAN','JAPAN'],
                   'id_city':[1,2,3,4,5,6,7],
                   'city': ['RIYADH','SEOUL','BUSAN','TOKYO','TOKYO','OSAKA','OSAKA']})

解决方案

  1. 构建映射字典:从hg中分别提取城市、国家与id_city的对应关系,保留每个名称首次出现的id_city(匹配示例规则)
  2. 替换并处理空值:用映射字典替换homeground的值,空值填充为0并转为整数类型
# 构建城市到id_city的映射(去重保留第一个匹配项)
city_map = hg.drop_duplicates(subset='city', keep='first').set_index('city')['id_city'].to_dict()
# 构建国家到id_city的映射(去重保留第一个匹配项)
country_map = hg.drop_duplicates(subset='country', keep='first').set_index('country')['id_city'].to_dict()

# 合并映射,城市优先级高于国家(若名称重叠优先用城市映射)
full_map = {**country_map, **city_map}

# 替换homeground列,空值填充为0并转为整数
student['homeground'] = student['homeground'].replace(full_map).fillna(0).astype(int)

# 输出结果
print(student)

输出结果

id  homeground
0   1           4
1   2           2
2   3           1
3   4           4
4   5           4
5   6           6
6   7           1
7   8           2
8   9           0
9  10           3

说明

若需要调整映射规则(比如国家对应其他id_city),可修改drop_duplicates的keep参数(如keep='last'取最后一个匹配项),或手动调整映射字典的键值对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:10:13