如何使用pandas的.map()方法为DataFrame创建新列
pandas.map()新增列实现方案
map()是针对Series的元素级映射方法,你可以根据需求选择以下两种常用方式实现新增列:
方式1:传入字典做值映射
适合枚举类的字段转换需求,比如对示例中的Job职业字段做职级映射,新增job_level列:
import pandas as pd # 你提供的示例数据 data = { 'age':[30,33,35,30,59], 'Job':['unemployed','services','management','management','blue-collar'], 'marital':["married","married","single","married","married"], 'Default':['no','no','no','no','no'], 'Balance':[1787,4989,1350,1476,0], 'Housing':['no','yes','no','yes','no'], 'Loan':['no','yes','no','yes','no'], 'Day':[19,11,16,3,5] } df = pd.DataFrame(data) # 1. 定义映射字典 job_map = { 'unemployed': 0, 'blue-collar': 1, 'services': 2, 'management': 3 } # 2. 调用map执行映射,赋值给新列 df['job_level'] = df['Job'].map(job_map)
如果需要给未匹配到的内容设置默认值,可以追加fillna():
df['job_level'] = df['Job'].map(job_map).fillna(-1)
方式2:传入自定义函数做逻辑判断
适合需要多条件判断的转换需求,比如对示例中的Balance账户余额做等级划分,新增balance_rank列:
# 1. 自定义映射逻辑函数 def get_rank(balance): if balance > 2000: return "高" elif 1000 <= balance <= 2000: return "中" else: return "低" # 2. 调用map执行映射,赋值给新列 df['balance_rank'] = df['Balance'].map(get_rank)
注意事项
map()只能作用在单列(Series对象)上,不能直接对整个DataFrame调用- 如果需要多列关联计算生成新列,建议使用
apply()方法替代
内容的提问来源于stack exchange,提问作者Ademuyiwa Ahmed
相关产品推荐
相关产品推荐

