使用Python:如果两个属性匹配(国家和日期),如何划分两个不同的指标(金额和汇率)?
Using Python: How to divide two different indicators (amount and exchange rate) in case two attributes match (Country AND date)?
我从包含三列 (screenshot of the table) 的经济学研究数据库下载并导入了一个 csv 文件:“国家代码”、“时间”、“指标”。基本上有两种类型的指标(1. 当地货币金额和 2. 欧元汇率)。我如何在 Python 中创建一个新列“EUR_amount”,如果国家代码和月份对于两个项目相同,则将金额除以汇率,例如EUR = amount/rate 国家和时间在哪里匹配?
非常感谢任何帮助! (请记住,我是 python 的菜鸟,这是我关于 Whosebug 的第一个问题。)提前致谢。
编辑:在收到 mozway 的反馈后添加此代码(感谢):
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]})
print(df)
所以,重申一下我的问题:在 country_code 和日期匹配的情况下,如何将项目曝光与项目外汇汇率分开?
您可以先将数据帧分成两部分 - 曝光和 FX-rate
fx = df[df["item"]=="FX-rate"]
exp = df[df["item"]!="FX-rate"]
之后可以使用
merged_df = pd.merge(fx,exp,on=["country_code","date"],how='outer')
有关其他参数和示例,请参阅 https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.merge.html。
以上将导致
country_code
date
item_x
value_x
item_y
value_y
EU
2019-03
FX-rate
1.00
exposure
15000.0
UK
2019-03
FX-rate
1.25
exposure
9000.0
US
2019-03
FX-rate
0.90
exposure
13000.0
EU
2019-04
FX-rate
1.00
exposure
16500.0
UK
2019-04
FX-rate
1.23
exposure
8750.0
US
2019-04
FX-rate
0.93
exposure
17000.0
EU
2019-05
FX-rate
1.00
exposure
17000.0
UK
2019-05
FX-rate
1.24
exposure
7999.0
US
2019-05
FX-rate
0.95
exposure
25000.0
接下来只是除法问题
merged_df["Convert"] = merged_df["value_y"]/merged_df["value_x"]
我从包含三列 (screenshot of the table) 的经济学研究数据库下载并导入了一个 csv 文件:“国家代码”、“时间”、“指标”。基本上有两种类型的指标(1. 当地货币金额和 2. 欧元汇率)。我如何在 Python 中创建一个新列“EUR_amount”,如果国家代码和月份对于两个项目相同,则将金额除以汇率,例如EUR = amount/rate 国家和时间在哪里匹配?
非常感谢任何帮助! (请记住,我是 python 的菜鸟,这是我关于 Whosebug 的第一个问题。)提前致谢。
编辑:在收到 mozway 的反馈后添加此代码(感谢):
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]})
print(df)
所以,重申一下我的问题:在 country_code 和日期匹配的情况下,如何将项目曝光与项目外汇汇率分开?
您可以先将数据帧分成两部分 - 曝光和 FX-rate
fx = df[df["item"]=="FX-rate"]
exp = df[df["item"]!="FX-rate"]
之后可以使用
merged_df = pd.merge(fx,exp,on=["country_code","date"],how='outer')
有关其他参数和示例,请参阅 https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.merge.html。
以上将导致
country_code | date | item_x | value_x | item_y | value_y |
---|---|---|---|---|---|
EU | 2019-03 | FX-rate | 1.00 | exposure | 15000.0 |
UK | 2019-03 | FX-rate | 1.25 | exposure | 9000.0 |
US | 2019-03 | FX-rate | 0.90 | exposure | 13000.0 |
EU | 2019-04 | FX-rate | 1.00 | exposure | 16500.0 |
UK | 2019-04 | FX-rate | 1.23 | exposure | 8750.0 |
US | 2019-04 | FX-rate | 0.93 | exposure | 17000.0 |
EU | 2019-05 | FX-rate | 1.00 | exposure | 17000.0 |
UK | 2019-05 | FX-rate | 1.24 | exposure | 7999.0 |
US | 2019-05 | FX-rate | 0.95 | exposure | 25000.0 |
接下来只是除法问题
merged_df["Convert"] = merged_df["value_y"]/merged_df["value_x"]