我有一个按日期显示的货币值的DataFrame:
USD EUR JPY CAD CNH
date
2017-06-29 0.770151 0.879765 0.006857 0.591919 0.113538
2017-06-28 0.773038 0.878451 0.006892 0.592764 0.113687
2017-06-27 0.781594 0.885069 0.006952 0.593128 0.114724
2017-06-26 0.785476 0.879456 0.007045 0.593763 0.114849
另一个包含要转换为GBP的值的DataFrame:
price date currency
0 21404.00000 2017-06-26 USD
3 21445.00000 2017-06-26 USD
4 1.27213 2017-06-26 USD
5 111.67500 2017-06-26 JPY
6 1.27205 2017-06-26 EUR
8 111.65500 2017-06-26 JPY
9 111.65500 2017-06-26 JPY
我的目标是"加入"这些货币的DataFrame值会产生新的rate
列:
price date currency rate
0 21404.00000 2017-06-26 USD 0.785476
3 21445.00000 2017-06-26 USD 0.785476
4 1.27213 2017-06-27 USD 0.781594
5 111.67500 2017-06-27 JPY 0.006952
6 1.27205 2017-06-28 EUR 0.885069
8 111.65500 2017-06-28 JPY 0.006892
9 111.65500 2017-06-29 JPY 0.006857
我对使用apply
或其他类型的基于行的迭代的任何方法都不感兴趣。相反,我正在寻找一种操纵前两个DataFrame的矢量化方式来获得第三个。
答案 0 :(得分:4)
使用lookup
查找费率,assign
放入新列
df.assign(rate=currencies.lookup(df.date, df.currency))
price date currency rate
0 21404.00000 2017-06-26 USD 0.785476
3 21445.00000 2017-06-26 USD 0.785476
4 1.27213 2017-06-27 USD 0.781594
5 111.67500 2017-06-27 JPY 0.006952
6 1.27205 2017-06-28 EUR 0.878451
8 111.65500 2017-06-28 JPY 0.006892
9 111.65500 2017-06-29 JPY 0.006857