基于单列映射字典值创建多列的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
相关产品推荐
相关产品推荐

