【发布时间】:2016-10-09 12:46:00
【问题描述】:
我一直在搜索基于满足两个标准合并两个数据框的高低。从本质上讲,我要做的是从一个数据帧到我的主数据帧中进行 vlookup,其中日期和股票代码匹配。
名为 df1 的主数据框的基本版本如下所示。它是 2016 年 5 月 1 日和 2016 年 5 月 2 日账户中的股票代码。
Account_Num Date Symbol
0 1 2016-05-01 AAPL
1 1 2016-05-01 UA
2 1 2016-05-01 DIS
3 2 2016-05-01 CVX
4 2 2016-05-01 GOOGL
5 2 2016-05-01 PX
6 3 2016-05-01 MOS
7 3 2016-05-01 BLK
8 3 2016-05-01 TMO
9 1 2016-05-02 AAPL
10 1 2016-05-02 UA
11 1 2016-05-02 DIS
12 2 2016-05-02 CVX
13 2 2016-05-02 GOOGL
14 2 2016-05-02 PX
15 3 2016-05-02 MOS
16 3 2016-05-02 BLK
17 3 2016-05-02 TMO
我的第二个数据框 df2 保存上述账户中 2016 年 5 月 1 日和 2016 年 5 月 2 日股票的价格,如下所示(虚构价格):
Date Symbol Price
0 2016-05-01 AAPL 99.02
1 2016-05-02 AAPL 94.00
2 2016-05-01 UA 43.00
3 2016-05-02 UA 40.67
4 2016-05-01 DIS 67.88
5 2016-05-02 DIS 70.03
6 2016-05-01 CVX 22.00
7 2016-05-02 CVX 24.47
8 2016-05-01 GOOGL 85.52
9 2016-05-02 GOOGL 84.33
10 2016-05-01 PX 44.22
11 2016-05-02 PX 47.16
12 2016-05-01 MOS 23.77
13 2016-05-02 MOS 21.56
14 2016-05-01 BLK 38.48
15 2016-05-02 BLK 41.22
16 2016-05-01 TMO 67.43
17 2016-05-02 TMO 65.11
我想最终得到的是df3,如下所示:
Account_Num Date Symbol Price
0 1 2016-05-01 AAPL 99.02
1 1 2016-05-01 UA 43.00
2 1 2016-05-01 DIS 67.88
3 2 2016-05-01 CVX 22.00
4 2 2016-05-01 GOOGL 85.52
5 2 2016-05-01 PX 44.22
6 3 2016-05-01 MOS 23.77
7 3 2016-05-01 BLK 38.48
8 3 2016-05-01 TMO 67.43
9 1 2016-05-02 AAPL 94.00
10 1 2016-05-02 UA 40.67
11 1 2016-05-02 DIS 70.03
12 2 2016-05-02 CVX 24.47
13 2 2016-05-02 GOOGL 84.33
14 2 2016-05-02 PX 47.16
15 3 2016-05-02 MOS 21.56
16 3 2016-05-02 BLK 41.22
17 3 2016-05-02 TMO 65.11
我看到的问题是两个数据帧的长度不同,我的 df1 有 100,000 行,而 df2 有 23,000。因此,使用索引并不是一对一的匹配。上面的数据框示例是非常基本的,因为在真实数据中,不同的账户比其他账户持有更多的股票。所以我认为需要发生的是我需要遍历 df1 中的行并从日期和符号匹配的 df2 中引入价格。
我在 Pandas 中找到了相当于 vlookup 的示例,但它只匹配一个条件,我正在寻找要匹配的日期和符号,然后获取当天的股票价格。
如果有人知道有关如何执行此操作的信息或有任何建议,将不胜感激
谢谢, da4l
【问题讨论】:
-
@da41 - 这里是提示,你需要“加入”两个表。你需要创建一个键来加入这两个表,比如 ->> 2016-05-01AAPL, . 2016-05-01UA...
-
谢谢@Merlin,我现在就试一试
标签: python-2.7 pandas dataframe merge