Python pandas如何基于字典列表映射替换DataFrame列生成symbol列
解决方案
你之前尝试的df.replace()方法仅支持单值查找替换,逻辑是遍历单元格做独立值匹配,无法同时参考同一行多个列的组合条件,因此实现不了双列联合映射的需求。
针对你的场景,最高效规范的实现方式是通过映射表关联匹配,核心逻辑如下:
- 先将字典列表格式的映射配置转换为pandas映射参考表
- 以
region、currency两列为联合关联键,将原表和映射表做左连接,自动匹配出对应的symbol值 - 删除不需要的旧列,调整列顺序得到目标结果
完整实现代码
import pandas as pd # 转换映射配置为DataFrame格式的映射表 currency_map = pd.DataFrame(currency_dict) # 双列联合匹配,关联出symbol字段 df = df.merge( currency_map, on=['region', 'currency'], how='left' ) # 删除冗余列,保留目标字段顺序 df = df[['date', 'price', 'symbol']]
执行后输出结果完全匹配预期:
date price symbol 0 2022-01-01 1.00 USD 1 2022-01-01 1.28 CAD 2 2022-01-01 1.42 AUD 3 2022-01-02 1.00 USD 4 2022-01-02 1.29 CAD 5 2022-01-02 1.41 AUD
可选写法(仅适合小数据量场景)
如果处理的数据量很小,也可以先把映射配置转换为以(region, currency)元组为键的字典,再逐行匹配取值。该写法因为要逐行遍历,性能远低于merge方案,大数据量下不推荐使用:
# 构建联合键:值的映射字典 pair_map = {(item['region'], item['currency']): item['symbol'] for item in currency_dict} # 逐行匹配生成symbol列 df['symbol'] = df.apply(lambda row: pair_map[(row['region'], row['currency'])], axis=1) # 删除原冗余列 df = df.drop(columns=['region', 'currency'])
内容的提问来源于stack exchange,提问作者MathMan 99
相关产品推荐
相关产品推荐

