我有一个数据集,其中的货币数字以多种不同的货币给出,例如:
ID X Currency
1 10 AUD
2 20 NZD
3 5 GBP
4 15 USD
我希望创建一个新列,以显示所有转换为GBP的值:
ID X Currency Converted X
1 10 AUD 5.5
2 20 NZD 10.4
3 5 GBP 5
4 15 USD 12.3
我有一个元组列表,其中包含货币和英镑的汇率:
exchange=[(AUD,0.55),(NZD,0.52),(USD,0.82)]
然后我尝试通过以下方式申请
: for a,b in exchange:
df.loc[df['Currency']==a,'Converted X'] = df.apply(lambda row: row['X']*b)
产生错误:
KeyError: ('X', 'occurred at index Id')
或
for a,b in exchange:
df.loc[df['Currency']==a,'X'] *= b)
产生错误:
KeyError: 'Converted X'
我看过groupby(),但是我现在不想总结数据,并且希望对每一行进行该操作。
答案 0 :(得分:1)
为了安全起见,建议您将GBP汇率添加到交易所中,
{% for ... %}
<div class="form-check form-check-inline">
<input type="checkbox" class="form-check-input" id="materialInline{{ .id}}">
<label class="form-check-label" for="materialInline{{ .id}}">{{ .title}}</label>
</div>
{% endfor %}
答案 1 :(得分:0)
您可以将Series.map
与Series.mul
乘以列X
乘以-如果需要原始值X
,如果字典中不存在值,则添加参数fill_value=1
:
df['Converted X'] = df['X'].mul(df['Currency'].map(dict(exchange)), fill_value=1)
print (df)
ID X Currency Converted X
0 1 10 AUD 5.5
1 2 20 NZD 10.4
2 3 5 GBP 5.0
3 4 15 USD 12.3
您的解决方案应更改:
df['Converted X'] = df['X']
for a,b in exchange:
df.loc[df['Currency']==a,'Converted X'] = df['X']*b
print (df)
ID X Currency Converted X
0 1 10 AUD 5.5
1 2 20 NZD 10.4
2 3 5 GBP 5.0
3 4 15 USD 12.3