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

基于单列映射字典值创建多列的Pandas技术问询

如何用字典映射给Pandas DataFrame一次性添加多个新列?

咱们先把你提到的示例数据明确下来,方便后续演示:

主DataFrame(记为df_main):

import pandas as pd

df_main = pd.DataFrame({
    'country': ['bolivia', 'canada', 'ghana']
})

映射关系DataFrame(记为df_mapping):

df_mapping = pd.DataFrame({
    'country': ['canada', 'bolivia', 'ghana'],
    'country_id': [11, 22, 33],
    'category': ['north', 'south', 'africa'],
    'color': ['red', 'green', 'yellow']
})

方法1:直接使用merge()合并(最推荐)

这是处理这类多列映射最直观的方式,因为你的映射关系本身就是一个DataFrame,直接通过共同的country列合并,就能一次性把所有需要的列都带过来:

result = df_main.merge(df_mapping, on='country', how='left')
print(result)

输出结果:

country  country_id category   color
0   bolivia          22    south   green
1    canada          11    north     red
2     ghana          33   africa  yellow
  • 参数how='left'是为了保证主DataFrame里的所有行都能保留,哪怕映射表里没有对应数据(这时候对应列会显示NaN)
  • 如果你的映射表是字典格式(比如键是国家名,值是包含多个属性的元组),可以看下面的方法。

方法2:字典映射后拆分多列

假设你把映射关系转成了这样的字典:

country_dict = {
    'bolivia': (22, 'south', 'green'),
    'canada': (11, 'north', 'red'),
    'ghana': (33, 'africa', 'yellow')
}

这时候可以用map()把每个国家对应的元组取出来,再用pd.Series()拆分成单独的列,最后和原DataFrame拼接:

# 映射并拆分多列
new_cols = df_main['country'].map(country_dict).apply(pd.Series)
# 给新列命名
new_cols.columns = ['country_id', 'category', 'color']
# 和原DataFrame合并
result = pd.concat([df_main, new_cols], axis=1)

这样得到的结果和方法1完全一致,适合映射关系是以字典形式存储的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:04:17