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年的平均货币汇率,1美元/1,4811加元。为了转换这些加拿大语句行,我想放入一个条件。
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值呢?
发布于 2019-11-19 16:16:50
您可以使用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.3798https://stackoverflow.com/questions/58928348
复制相似问题