【发布时间】:2021-08-31 11:26:15
【问题描述】:
我有以下字典:
rates = {'USD':
{'2019': 1,
'2020': 2,
'2021': 3},
'CAD':
{'2019': 4,
'2020': 5,
'2021': 6}
}
我有以下虚拟数据框:
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,其中rate = f(currency,year)。我正在尝试:
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) 查找时间。
标签: python pandas dataframe dictionary