货币换算

时间:2019-11-19 07:04:00

标签: python conditional-statements calculation

Snapshot of dataframe 我有一个很大的数据框,其中包含20年内的美元对帐单和加元对帐单。我需要将加拿大的报表除以特定年份的平均汇率,将其转换为美元。

df = pd.Dataframe([[1998,'CAD',123,1234],[1999,'CAD',345,1233],[1999,'USD',454,1232],[1999,'USD',2333,3456]], columns=['year','currency','net_profit','revenue'])

year currency net_profit revenue
1998 CAD      123        1234
1999 CAD      345        1233
1999 USD      454        1232
1999 USD      2333       3456

使用此代码可以找到1998年的CAD公司。

 filter_1998 = firm[(firm['currency']== 'CAD') & (firm.Year ==1998)]

在那之后,我需要以1998年的平均货币汇率1USD / 1,4811 CAD转换这些行。要转换这些加拿大语句行,我想添加一个条件。

if firm[(firm['currency'] == CAD)&(firm['year']==1998:
pd.divide(x) / 1,4811
Translated CAD values into USD.

第一行将除以汇率。所需的结果如下所示:

    year currency net_profit revenue
    1998 CAD      83.05      833.16
    1999 CAD      345        1233
    1999 USD      454        1232
    1999 USD      2333       3456

那么,如何只用条件选择的行进行计算,而仍然用USD值替换CAD值?

1 个答案:

答案 0 :(得分:0)

您可以如下使用mergenp.where。 我假设您在另一个数据框中具有每年的平均费率。

import numpy as np
import pandas as pd
df = pd.DataFrame([[1998,'CAD',123,1234],[1999,'CAD',345,1233],[1999,'USD',454,1232],[1999,'USD',2333,3456]], columns=['year','currency','net_profit','revenue'])
df_rate = pd.DataFrame([[1998, 1.4811], [1999, 1.3798]],columns=['year','rate'])
df = df.merge(df_rate, how='left', on='year')
df['revenue'] = np.where(df['currency'] == 'CAD',df['revenue']/df['rate'],df['revenue'])
df

输出如下

    year    currency    net_profit  revenue     rate
0   1998    CAD     123     833.164540  1.4811
1   1999    CAD     345     893.607769  1.3798
2   1999    USD     454     1232.000000     1.3798
3   1999    USD     2333    3456.000000     1.3798