问题
I have DataFrame with two columns:
col1 | col2
20 EUR
31 GBP
5 JPY
I may have 10000 rows like this
How to do fast currency conversion to base currency being GBP?
should I use easymoney? I know how to apply conversion to single row but I do not know how to iterate through all the rows fast.
EDIT: I would like to apply sth as:
def convert_currency(amount, currency_symbol):
converted = ep.currency_converter(amount=1000, from_currency=currency_symbol, to_currency="GBP")
return converted
df.loc[df.currency != 'GBP', 'col1'] = convert_currency(currency_data.col1, df.col2
)
but it does not work yet.
回答1:
Join a third column with the conversion rates for each currency, joining on the currency code in col2. Then create a column with the translated amount.
dfRate:
code | rate
EUR 1.123
USD 2.234
df2 = pd.merge(df1, dfRate, how='left', left_on=['col2'], right_on=['code'])
df2['translatedAmt'] = df2['col1'] / df2['rate']
回答2:
df = pd.DataFrame([[20, 'EUR'], [31, 'GBP'], [5, 'JPY']], columns=['value', 'currency'])
print df
value currency
0 20 EUR
1 31 GBP
2 5 JPY
def convert_to_gbp(args): # placeholder for your fancy conversion function
amount, currency = args
rates = {'EUR': 2, 'JPY': 10, 'GBP': 1}
return rates[currency] * amount
df.assign(**{'In GBP': df.apply(convert_to_gbp, axis=1)})
value currency In GBP
0 20 EUR 40
1 31 GBP 31
2 5 JPY 50
来源:https://stackoverflow.com/questions/46227944/pandas-dataframe-currency-conversion