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

如何基于字典映射DataFrame数组列的值生成对应新列

问题

基于给定的城市-国家映射字典,为DataFrame中数组类型的Cities列生成对应的Country列:将Cities数组内的每个城市映射为字典对应的国家,无匹配项则设为None。

映射字典

{
  'Paris': 'France',
  'Amsterdam': 'Netherlands',
  'Lisboa': 'Portugal',
  'London': 'United Kingdom',
  'Madrid': 'Spain',
  'Berlin': 'Germany',
  'Vienna': 'Austria'
}

原始DataFrame

First_colCities
First_value['Paris', 'Lisboa', 'Barcelona']
Second_value['Amsterdam', 'Madrid']
Third_value['Lisboa', 'London', 'Amsterdam', 'Milan', 'Prague']
Fourth_value['Rome', 'Lyon', 'Vienna']

期望输出

First_colCitiesCountry
First_value['Paris', 'Lisboa', 'Barcelona']['France', 'Portugal', None]
Second_value['Amsterdam', 'Madrid']['Netherlands', 'Spain']
Third_value['Lisboa', 'London', 'Amsterdam', 'Milan', 'Prague']['Portugal', 'United Kingdom', 'Netherlands', None, None]
Fourth_value['Rome', 'Lyon', 'Oslo'][None, None, None]

(注:原始期望输出中存在两处笔误:Third_value的Country列最后一个值误写为'Vienna';Fourth_value的Cities列与原始数据不一致,上述为修正后的合理期望)


解决方案

使用pandas的apply方法结合列表推导式,通过字典的get方法实现批量映射:

完整代码

import pandas as pd

# 定义映射字典
city_country_map = {
    'Paris': 'France',
    'Amsterdam': 'Netherlands',
    'Lisboa': 'Portugal',
    'London': 'United Kingdom',
    'Madrid': 'Spain',
    'Berlin': 'Germany',
    'Vienna': 'Austria'
}

# 构建原始DataFrame
df = pd.DataFrame({
    'First_col': ['First_value', 'Second_value', 'Third_value', 'Fourth_value'],
    'Cities': [
        ['Paris', 'Lisboa', 'Barcelona'],
        ['Amsterdam', 'Madrid'],
        ['Lisboa', 'London', 'Amsterdam', 'Milan', 'Prague'],
        ['Rome', 'Lyon', 'Vienna']
    ]
})

# 生成Country列
df['Country'] = df['Cities'].apply(lambda cities: [city_country_map.get(city, None) for city in cities])

# 查看结果
print(df)

代码解释

  • df['Cities'].apply(...):遍历Cities列的每个数组元素
  • lambda cities: [...]:对每个城市数组,逐个执行映射逻辑
  • city_country_map.get(city, None):从字典中获取城市对应的国家,若城市不在字典中则返回None

运行输出

First_col                                              Cities                                              Country
0   First_value                        [Paris, Lisboa, Barcelona]                          [France, Portugal, None]
1  Second_value                             [Amsterdam, Madrid]                             [Netherlands, Spain]
2   Third_value  [Lisboa, London, Amsterdam, Milan, Prague]  [Portugal, United Kingdom, Netherlands, None, None]
3  Fourth_value                          [Rome, Lyon, Vienna]                          [None, None, Austria]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:05:22