我有两个熊猫数据框,一个名为订单
,另一个名为每日价格
。
daily_prices
如下:
AAPL GOOG IBM XOM
2011-01-10 339.44 614.21 142.78 71.57
2011-01-13 342.64 616.69 143.92 73.08
2011-01-26 340.82 616.50 155.74 75.89
2011-02-02 341.29 612.00 157.93 79.46
2011-02-10 351.42 616.44 159.32 79.68
2011-03-03 356.40 609.56 158.73 82.19
2011-05-03 345.14 533.89 167.84 82.00
2011-06-03 340.42 523.08 160.97 78.19
2011-06-10 323.03 509.51 159.14 76.84
2011-08-01 393.26 606.77 176.28 76.67
2011-12-20 392.46 630.37 184.14 79.97
orders
如下:
direction size ticker prices
2011-01-10 Buy 1500 AAPL 339.44
2011-01-13 Sell 1500 AAPL 342.64
2011-01-13 Buy 4000 IBM 143.92
2011-01-26 Buy 1000 GOOG 616.50
2011-02-02 Sell 4000 XOM 79.46
2011-02-10 Buy 4000 XOM 79.68
2011-03-03 Sell 1000 GOOG 609.56
2011-03-03 Sell 2200 IBM 158.73
2011-06-03 Sell 3300 IBM 160.97
2011-05-03 Buy 1500 IBM 167.84
2011-06-10 Buy 1200 AAPL 323.03
2011-08-01 Buy 55 GOOG 606.77
2011-08-01 Sell 55 GOOG 606.77
2011-12-20 Sell 1200 AAPL 392.46
两个数据帧的索引都是datetime.date。
orders
数据帧中的prices
列是通过使用列表推导式循环遍历所有订单并在daily_prices
数据帧中查找特定日期的特定股票,然后将该列表作为列添加到orders
数据帧中的。我想使用数组操作而不是循环来完成这个操作。可以吗?我尝试使用:
daily_prices.ix[dates, tickers]
但是这将返回两个列表的笛卡尔积矩阵。我希望它返回指定日期和股票代码的价格列向量。
DateTime
用作orders
和prices
数据框的索引时,使用略有不同的代码myval = prices.lookup(order[0], order[1])
,我会得到“TypeError: object of type 'datetime.datetime' has no len()”。其中order
来自于for order in orders
。所以在我的情况下,order
是1d而不是像上面(orders)的2d。这是错误的用法还是如何修复它?(我想从具有完全相同信息的价格数据框中获取单个日期和股票代码(来自订单数据框)的匹配条目。) - Andreas Reiff