如何在日期匹配时将df1的price与df2汇率相乘并添加至df1
解决方案
没问题,这是个很典型的DataFrame匹配计算场景,我来一步步帮你搞定:
核心思路
我们需要通过日期列精准匹配把两个DataFrame合并,再用price乘以对应日期的汇率得到新列priceEUR。用Pandas的merge方法就能轻松实现,具体步骤如下:
步骤1:统一日期列格式
首先要确保两个DataFrame的date列都是datetime类型,避免字符串格式差异导致匹配失败:
import pandas as pd # 构造你的示例数据(你可以直接替换成自己的真实数据) df1 = pd.DataFrame({ 'date': ['2019-12-21', '2019-10-25', '2019-10-24', '2019-12-13'], 'price': [140, 91, 91, 70] }) df2 = pd.DataFrame({ 'date': ['2019-12-21', '2019-12-22', '2019-10-25', '2019-10-24', '2019-12-13'], 'exchange rate': [1.1097, 1.117, 1.1074, 1.1073, 1.108] # 补充了你预期结果需要的对应汇率 }) # 转换日期列为datetime类型 df1['date'] = pd.to_datetime(df1['date']) df2['date'] = pd.to_datetime(df2['date'])
步骤2:按日期合并DataFrame
使用merge方法做左连接(how='left'),这样能完整保留df1的所有行,同时匹配df2中对应日期的汇率:
# 按date列合并两个DataFrame merged_df = df1.merge(df2, on='date', how='left')
步骤3:计算新列priceEUR
直接将price和exchange rate相乘,就能得到转换后的欧元价格:
# 计算并添加priceEUR列 merged_df['priceEUR'] = merged_df['price'] * merged_df['exchange rate'] # 如果你想直接在原df1上添加列,也可以这么写 df1['priceEUR'] = df1['price'] * df1.merge(df2, on='date', how='left')['exchange rate']
最终结果
运行完上述代码后,你会得到和预期完全一致的结果:
| date | price | priceEUR |
|---|---|---|
| 2019-12-21 | 140 | 155.358 |
| 2019-10-25 | 91 | 100.7734 |
| 2019-10-24 | 91 | 100.7643 |
| 2019-12-13 | 70 | 77.56 |
额外小提示
- 如果df2里有df1没有的日期,左连接会自动忽略这些无关行;
- 如果df1中有日期在df2里找不到对应汇率,
priceEUR会显示NaN,你可以用merged_df['priceEUR'].fillna(0)或者其他逻辑填充缺失值; - 要是觉得
exchange rate列名带空格写起来麻烦,可以先重命名:df2.rename(columns={'exchange rate': 'exchange_rate'}, inplace=True),后续代码里直接用exchange_rate更顺手。
内容的提问来源于stack exchange,提问作者Murakmad
相关产品推荐
相关产品推荐

