我有以下字典:
我使用以上内容如下:
然而,这只会返回第一个汇率,比如值为1,而不是相应的汇率:
预期结果是:
rates = {'USD':
{'2019': 1,
'2020': 2,
'2021': 3},
'CAD':
{'2019': 4,
'2020': 5,
'2021': 6}
}
and I have the following dummy dataframe:
Item Currency Year Rate
0 1 USD 2019
1 2 USD 2020
2 3 CAD 2021
3 4 CAD 2019
4 5 GBP 2020
我现在要通过映射正确的汇率(rate = f(currency, year)
),来填充 Rate
列。我正在试着使用以下代码:
def map_rate(data, rates):
for index, row in data.iterrows():
currency = str(row['Currency'])
if currency in list(rates.keys()):
year = str(row['Year'])
rate = rates[currency][year]
else:
rate = 1
return rate
我使用以上内容如下:
df['Rate'] = map_rate(test, rates)
然而,这只会返回第一个汇率,比如值为1,而不是相应的汇率:
Item Currency Year Rate
0 1 USD 2019 1
1 2 USD 2020 1
2 3 CAD 2021 1
3 4 CAD 2019 1
4 5 GBP 2020 1
预期结果是:
Item Currency Year Rate
0 1 USD 2019 1
1 2 USD 2020 2
2 3 CAD 2021 6
3 4 CAD 2019 4
4 5 GBP 2020 1
我的错误在哪里?
if currency in rates
,而不是if currency in list(rates.keys())
。后者会形成一个列表并且失去 ~O(1) 的查找时间。 - Mustafa Aydın