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

如何根据日期与货币匹配规则为DataFrame填充另一DataFrame的汇率列

解决Pandas多条件匹配汇率问题

看起来你需要根据日期和货币两个维度,把exchange_rates里的汇率匹配到prices表中对吧?你之前尝试的match()、np.where和iloc没解决问题,大概率是因为exchange_rates里存在重复的(date, currency)组合,直接单条件匹配或者按位置取值没法处理这种多对一的场景。我来给你一步步搞定:

1. 先统一日期格式(关键!)

首先要把两个表的日期转换成datetime类型,避免因为字符串格式不一致导致匹配失败:

import pandas as pd

# 转换日期格式为datetime(原格式是dd-mm-yyyy)
prices['date'] = pd.to_datetime(prices['date'], format='%d-%m-%Y')
exchange_rates['date'] = pd.to_datetime(exchange_rates['date'], format='%d-%m-%Y')

2. 清理exchange_rates的重复数据

你的exchange_rates表中,同一个日期+货币对应多个汇率值(比如2018-04-13的EUR有3个不同rate),所以得先确定你要取哪种汇率:

  • 取平均汇率(最常用)
# 按日期和货币分组,计算平均汇率
exchange_rates_clean = exchange_rates.groupby(['date', 'currency'])['rate'].mean().reset_index()
  • 取最后一条记录的汇率
exchange_rates_clean = exchange_rates.groupby(['date', 'currency'])['rate'].last().reset_index()
  • 取第一条记录的汇率
exchange_rates_clean = exchange_rates.groupby(['date', 'currency'])['rate'].first().reset_index()

3. 用merge完成多条件匹配

这是Pandas中处理多条件关联最稳妥的方法,直接按date和currency两个字段匹配:

# 左连接合并,保留prices中所有行,匹配不到的rate会显示NaN
prices_with_rate = pd.merge(prices, exchange_rates_clean, on=['date', 'currency'], how='left')

# 可选:删掉原prices表的空rate列,并重命名新列
prices_with_rate = prices_with_rate.drop('rate_x', axis=1).rename(columns={'rate_y': 'rate'})

示例结果(以平均汇率为例)

处理后的prices_with_rate会是这样:

datepricecurrencyrate
2018-04-1334EUR4.0667
2018-04-1423USDNaN
2018-04-1564PLNNaN

(注:14、15号的汇率因为exchange_rates里没有对应数据,所以显示NaN,你可以根据需求用fillna填充默认值)

为什么之前的方法不好用?

  • match():只能处理单条件的模糊匹配,没法同时匹配日期和货币两个字段
  • np.where:多条件嵌套写起来非常繁琐,而且没法处理重复数据的情况
  • iloc:是按行索引位置取值,和你的条件匹配需求完全不匹配

内容的提问来源于stack exchange,提问作者Krzysztof Musialik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:12:17