2017-09-14 127 views
1

我有两列数据帧:熊猫数据帧的货币转换

col1  | col2 

20   EUR 
31   GBP 
5   JPY 

我可以有10000行这样

如何做到快速的货币转换为基础货币是GBP?

我应该使用easymoney吗? 我知道如何将转换应用到单行,但我不知道如何快速遍历所有行。

编辑: 我想申请某事物:

def convert_currency(amount, currency_symbol): 
    converted = ep.currency_converter(amount=1000, from_currency=currency_symbol, to_currency="GBP") 
    return converted 


df.loc[df.currency != 'GBP', 'col1'] = convert_currency(currency_data.col1, df.col2 
                       ) 

,但它并没有正常工作。

+0

覆盖该所述行,像这样'DF [ 'COL1'] =公式* DF [ 'COL1']'。我认为 – deaspo

+0

有没有快速的选择,以熊猫摄入货币比率?我有什么30差异货币? – BlueDog

+0

你有汇率和在哪种形式? – MaxU

回答

1

加入第三列,每种货币的兑换率加入col2中的货币代码。然后创建一个包含已转换金额的列。

dfRate: 
code | rate 
EUR 1.123 
USD 2.234 

df2 = pd.merge(df1, dfRate, how='left', left_on=['col2'], right_on=['code']) 

df2['translatedAmt'] = df2['col1']/df2['rate'] 
+0

它只为第一个'x'列'x'等于dfRate的len。 – BlueDog

+0

它输入的所有后面的列NaN – BlueDog

+0

您是否遍历任一数据框? – Dan

0
df = pd.DataFrame([[20, 'EUR'], [31, 'GBP'], [5, 'JPY']], columns=['value', 'currency']) 
print df 

    value currency 
0  20  EUR 
1  31  GBP 
2  5  JPY 

def convert_to_gbp(args): # placeholder for your fancy conversion function 
    amount, currency = args 
    rates = {'EUR': 2, 'JPY': 10, 'GBP': 1} 
    return rates[currency] * amount 

df.assign(**{'In GBP': df.apply(convert_to_gbp, axis=1)}) 

    value currency In GBP 
0  20  EUR  40 
1  31  GBP  31 
2  5  JPY  50