Python Pandas - Создание нового столбца с помощью currency_converter - PullRequest
0 голосов
/ 01 мая 2018

У меня есть датафрейм (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 в евро, а затем в фунты стерлингов (currency_converter конвертирует только все в евро или обратно, поэтому я не конвертирую прямо в фунты стерлингов). Я хочу, чтобы курс валюты за год, когда произошло финансирование.

Я использую код шаблона, указанный на сайте: 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 января каждого года, чтобы привести его в соответствие, поэтому я попытался сделать следующее:

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, и тогда я смогу сделать то же самое, чтобы преобразовать его в GBP, было бы здорово.

Спасибо

1 Ответ

0 голосов
/ 01 мая 2018

Вы создали функцию для конвертации валюты, используя данные строки:

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

и затем примените его к фрейму данных:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...