Pandas - 根据单元格值选择列

时间:2017-06-30 22:31:09

标签: python pandas

我有一个按日期显示的货币值的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的矢量化方式来获得第三个。

1 个答案:

答案 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