У меня есть pandas фрейм данных res с 4 столбцами: Счет, Валюта, Баланс LCY, Баланс FCY
У меня также есть словарь курсы , который содержит все разные курсы валют (название ключевой валюты: значение курса в виде строки) мне нужно изменить LCY баланса на счетах, валюта которых не EUR, чтобы быть FCY баланса / курс .
я имею попытался запустить:
res['Balance LCY'].loc[res['Currency'] != 'EUR'] = res['Balance FCY'] / float(rates[res['Currency']])
однако я получаю сообщение об ошибке:
TypeError: 'Series' objects are mutable, thus they cannot be hashed
любая помощь оценена.
Кажется, что проблема тянет значение для указанной ячейки c в столбце валюты, чтобы выполнить поиск во внешнем словаре.
Мне удалось решить это самостоятельно, превратив словарь в массив данных, соединив его с исходным кадром данных res, а затем Выполнение расчета.
код решения:
erates = pd.DataFrame(list(rates.items()), columns=['Currency', 'Rate'])
res = pd.merge(res, erates, how='left', on='Currency')
res.loc[res['Currency'] != 'EUR', 'Balance LCY'] = res['Balance FCY'] / res['Rate']
Пример данных res:
Account,Currency,Balance LCY,Balance FCY
123,EUR,-299183.94,0
124,EUR,-28578532,0
125,EUR,0,0
126,CAD,0,0
127,PLN,0,-2646970
128,ZAR,0,-5026915
129,DKK,0,-2862948.8
130,CHF,0,-343557.9
131,USD,0,-71672.87
132,CAD,0,84295.63
133,SGD,0,-269976.9
134,TRY,0,-494451.56
135,NZD,0,-256601.95
136,JPY,0,0
ставки:
rates= {
"CAD": 1.432,
"HKD": 8.4117,
"ISK": 138.3,
"PHP": 54.955,
"DKK": 7.4702,
"HUF": 337.1,
"CZK": 25.061,
"AUD": 1.6363,
"RON": 4.804,
"SEK": 10.569,
"IDR": 14867.58,
"INR": 77.754,
"BRL": 4.755,
"RUB": 69.548,
"HRK": 7.449,
"JPY": 120.96,
"THB": 34.164,
"CHF": 1.061,
"SGD": 1.5131,
"PLN": 4.2835,
"BGN": 1.9558,
"TRY": 6.6131,
"CNY": 7.5945,
"NOK": 10.0873,
"NZD": 1.7104,
"ZAR": 16.2965,
"USD": 1.0801,
"MXN": 20.5183,
"ILS": 3.6985,
"GBP": 0.8351,
"KRW": 1309.45,
"MYR": 4.5294
}