如何基于pandas DataFrame的id列匹配字典值新增对应type列
Pandas 基于id列映射生成新列的实现方案
错误原因
你之前的写法无法生效是因为df.assign()的入参键位对应要新增的列名,你直接传入映射字典作为参数,会被识别为要新增aa、bb、ci三个独立列,完全不符合需求。
可行方案
你要实现的是基于id列的值匹配字典映射,用Series.map()方法即可完成,这也是字典映射生成新列的标准实现方式:
- 先定义你的映射字典(如果需要数值类型就不要给值加引号)
id_map = {'aa': 160, 'bb': 80, 'ci': 70}
- 直接生成新列
# 直接赋值写法 df['type'] = df['id'].map(id_map) # 链式assign写法(适合写方法链的场景) df = df.assign(type=lambda x: x['id'].map(id_map))
可选扩展
如果存在id列的值不在映射字典里的场景,可以搭配fillna()设置默认值,比如未匹配到的行type默认填0:
df['type'] = df['id'].map(id_map).fillna(0)
运行后输出结果和你期望的完全一致。
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

