首页 > 解决方案 > 使用 Python:如果两个属性匹配(国家和日期),如何划分两个不同的指标(金额和汇率)?

问题描述

我从一个包含三列(表格截图)的经济学研究数据库下载并导入了一个 csv 文件:“国家代码”、“时间”、“指标”。基本上有两种类型的指标(1. 当地货币金额和 2. 欧元汇率)。如何在 Python 中创建一个新列“EUR_amount”,将金额除以汇率,以防两个项目的国家代码和月份相同,例如,欧元 = 国家和时间匹配的金额/汇率?

任何帮助都非常感谢!(请记住,我是 python 的菜鸟,这是我关于 stackoverflow 的第一个问题。)提前非常感谢。

编辑:在收到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 和 date 匹配的情况下,如何将项目曝光与项目 FX-rate 分开?

标签: pythonpandasdataframecsvdata-manipulation

解决方案


您可以首先将数据帧分成两部分 - 曝光和外汇汇率

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

以上将导致

国家代码 日期 item_x 值_x item_y value_y
欧洲联盟 2019-03 汇率 1.00 接触 15000.0
英国 2019-03 汇率 1.25 接触 9000.0
我们 2019-03 汇率 0.90 接触 13000.0
欧洲联盟 2019-04 汇率 1.00 接触 16500.0
英国 2019-04 汇率 1.23 接触 8750.0
我们 2019-04 汇率 0.93 接触 17000.0
欧洲联盟 2019-05 汇率 1.00 接触 17000.0
英国 2019-05 汇率 1.24 接触 7999.0
我们 2019-05 汇率 0.95 接触 25000.0

接下来只是分工的问题

merged_df["Convert"] = merged_df["value_y"]/merged_df["value_x"]

推荐阅读