我有一个像这样的数据帧(dfFF):
Sector Country Currency Amount Fund Start Year
0 Public USA USD 22000 2016
0 Private Hong Kong HKD 42000 2015
...
我想创建一个新列,将currency/amount/fund start year
转换为欧元,然后转换为GBP(currency_converter只转换为欧元或返回的所有内容,因此我不会直接转换为GBP)。我想要资金发生的那一年的货币汇率。
我正在使用网站提供的模板代码: https://pypi.org/project/CurrencyConverter/
from currency_converter import CurrencyConverter
from datetime import date
c = CurrencyConverter()
c.convert(100, 'EUR', 'USD', date=date(2013, 3, 21))
我想每年1月1日使用它来保持一致,所以我尝试了以下操作:
c = CurrencyConverter()
dfFF['Value'] = (c.convert(dfFF['Amount'],dfFF['Currency'],
'EUR',date=date(dfFF['Fund Start Year'],1,1)))
我收到错误:
TypeError: 'Series' objects are mutable, thus they cannot be hashed
虽然我觉得我的解决方案不是最好的方法。
有什么建议吗?即使我刚刚进入EUROS,然后我也可以将其转换为英镑,这将是非常好的。
谢谢
答案 0 :(得分:1)
您已创建一个使用行数据转换货币的功能:
def currency_convertor(row):
amount = row['amount']
curr = row['Currency'],
date_r = row['Fund Start Year']
new_curr = c.convert(amount,curr,'EUR',date=date(date_r,1,1))
return new_curr
然后将其应用于dataframe:
dfFF['EUR_new'] = dfFF.apply(currency_convert, axis=1) # make sure to set axis=1
def currency_convertor(row,new_currency='EUR'):
amount = row['amount']
curr = row['Currency']
date_r = row['Fund Start Year']
new_curr = c.convert(amount,curr,new_currency,date=date(date_r,1,1))
return new_curr
dfFF['new_currency'] = dfFF.apply(lambda x: currency_convertor(x,new_currency="GBP"), axis=1)