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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:00:55