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

如何通过Pandas将groupby.ngroup生成的cityID还原为城市名称

用Pandas通过cityID填充df2的城市名称

没问题,这事儿在Pandas里用**映射(mapping)**的方式就能轻松解决,我给你一步步演示:

核心思路

先从原始的df中提取cityID和对应城市名称的映射关系,再用这个映射去替换df2里的city列值。

完整代码示例

import pandas as pd

# 模拟你已有的df数据
data_df = {
    'names': ['ali', 'john', 'aslam', 'khan', 'umair'],
    'city': ['Islamabad', 'lahore', 'Islamabad', 'Peshawar', 'lahore'],
    'cityID': [0, 1, 0, 2, 1]
}
df = pd.DataFrame(data_df)

# 模拟你已有的df2数据
data_df2 = {
    'cityID': [2,1,2,2,0,1,1,2,1,0,2,0],
    'city': ['?']*12
}
df2 = pd.DataFrame(data_df2)

# 步骤1:从df生成cityID到城市名的映射字典
# 先去重确保每个cityID只对应一个城市,再转成字典
city_mapping = df.drop_duplicates(subset=['cityID']).set_index('cityID')['city'].to_dict()

# 步骤2:用映射填充df2的city列
df2['city'] = df2['cityID'].map(city_mapping)

# 查看最终结果
print(df2)

代码细节说明

  • 生成映射字典:df.drop_duplicates(subset=['cityID'])先剔除df中重复的cityID行,保证每个cityID只关联一个城市;再通过set_index('cityID')['city'].to_dict()把cityID设为索引,提取city列转成字典,最终得到的结构是{0: 'Islamabad', 1: 'lahore', 2: 'Peshawar'}。
  • 填充数据:df2['cityID'].map(city_mapping)会遍历df2的每一个cityID,自动从字典中匹配对应的城市名,替换掉原来的?。

可选的异常处理

如果df2中存在df里没有的陌生cityID,可以用fillna给这些未知ID设置默认值:

df2['city'] = df2['cityID'].map(city_mapping).fillna('Unknown')

内容的提问来源于stack exchange,提问作者Imran Khan Khattak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:11:02