Python如何在国家与日期匹配时,用金额除以对应汇率计算EUR_amount
解决方案
你可以通过pandas透视表功能快速实现计算,逻辑直观适合新手,完整可运行代码如下:
import pandas as pd # 示例输入数据 df = pd.DataFrame({ 'country_code':['EU','UK','US','EU','UK','US','EU','UK','US','EU','UK','US','EU','UK','US','EU','UK','US'], 'date':['2019-03','2019-03','2019-03','2019-04','2019-04','2019-04','2019-05','2019-05','2019-05','2019-03','2019-03','2019-03','2019-04','2019-04','2019-04','2019-05','2019-05','2019-05'], 'item':['exposure','exposure','exposure','exposure','exposure','exposure','exposure','exposure','exposure','FX-rate','FX-rate','FX-rate','FX-rate','FX-rate','FX-rate','FX-rate','FX-rate','FX-rate'], 'value':[15000,9000,13000,16500,8750,17000,17000,7999,25000,1.00,1.25,0.90,1,1.23,0.93,1.00,1.24,0.95] }) # 1. 长表转宽表,将同一国家、同一日期的金额、汇率放在同一行 df_wide = df.pivot( index=['country_code', 'date'], # 匹配维度:国家+日期 columns='item', # 要拆分的指标列 values='value' # 指标对应的数值 ).reset_index() # 2. 直接计算欧元计价金额 df_wide['EUR_amount'] = df_wide['exposure'] / df_wide['FX-rate'] # 输出结果 print(df_wide)
运行后输出的宽表结构如下,每行对应唯一的国家+日期组合,自带计算好的欧元金额:
| country_code | date | FX-rate | exposure | EUR_amount |
|---|---|---|---|---|
| EU | 2019-03 | 1.00 | 15000 | 15000.000000 |
| EU | 2019-04 | 1.00 | 16500 | 16500.000000 |
| EU | 2019-05 | 1.00 | 17000 | 17000.000000 |
| UK | 2019-03 | 1.25 | 9000 | 7200.000000 |
| UK | 2019-04 | 1.23 | 8750 | 7113.821138 |
| UK | 2019-05 | 1.24 | 7999 | 6450.806452 |
| US | 2019-03 | 0.90 | 13000 | 14444.444444 |
| US | 2019-04 | 0.93 | 17000 | 18279.569892 |
| US | 2019-05 | 0.95 | 25000 | 26315.789474 |
如果你需要保留原始的长表结构,只给金额行添加计算结果,可以用下面的方法:
# 构造国家+日期对应汇率的映射表 rate_dict = df[df['item'] == 'FX-rate'].set_index(['country_code', 'date'])['value'].to_dict() # 匹配汇率计算欧元金额,仅填充到金额行 df.loc[df['item'] == 'exposure', 'EUR_amount'] = df.loc[df['item'] == 'exposure'].apply( lambda row: row['value'] / rate_dict[(row['country_code'], row['date'])], axis=1 ) print(df)
内容的提问来源于stack exchange,提问作者Mathias Nuding
相关产品推荐
相关产品推荐

