我有一个使用不同货币(例如美元,欧元和加元)的交易数据框,其中每一行都是交易,货币由货币列指定,特定日期从给定货币到CAD的转换率是在后续栏中指定
[1] 7 8 1 2 3
我想在df中定义一个新列,该列显示转换为CAD的交易价值。如何在不使用循环的情况下以编程方式执行此操作?
答案 0 :(得分:0)
df.assign(ValueCAD = df.values[tuple(df.Currency.transform(lambda x: dict(zip(df.columns,
range(len(df.columns)))).get(x)).reset_index().values.T)].astype(float) * df.Value)
Out[230]:
Value Currency CAD USD EUR ValueCAD
0 1 CAD 1 1.3 1.4 1.0
1 2 USD 1 1.2 1.5 2.4
2 3 EUR 1 1.4 1.4 4.2
3 4 USD 1 1.1 1.4 4.4
您也可以这样做:
df.merge(df.melt(['Value','Currency']).pipe(lambda x: x[x.Currency==x.variable].
drop('variable',1)).pipe(lambda x:x.assign(ValueCAD=x.Value*x.value)).
drop('value',1))
Out[241]:
Value Currency CAD USD EUR ValueCAD
0 1 CAD 1 1.3 1.4 1.0
1 2 USD 1 1.2 1.5 2.4
2 3 EUR 1 1.4 1.4 4.2
3 4 USD 1 1.1 1.4 4.4
答案 1 :(得分:0)
一种方法是使用df.lookup
:
df["Value_in_CAD"] = df.Value * df.lookup(df.index, df.Currency)
这给了我
In [12]: df
Out[12]:
CAD Currency EUR USD Value Value_in_CAD
0 1 CAD 1.4 1.3 1 1.0
1 1 USD 1.5 1.2 2 2.4
2 1 EUR 1.4 1.4 3 4.2
3 1 USD 1.4 1.1 4 4.4