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值?
答案 0 :(得分:0)
您可以如下使用merge
和np.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