我正在对一些股票进行事件研究,这会产生一个 pandas DataFrame,其中的列是股票代码(SPY、GOOG、AAPL 等),索引是时间戳。DataFrame 中的单元格的值为 NaN 或 1。我想根据事件 DataFrame 生成一个订单 DataFrame。由于我想为每次单元格 == 1 创建一个订单,我认为 applymap 是合适的。但是,似乎使用 applymap 会剥离其索引和列的单元格。我尝试了下面的代码:
def appendOrder(orders, value):
if value == 1:
index = ["Year", "Month", "Day", "Stock", "OrderType", "Amount"]
s = pd.Series(index=index)
s["Stock"] = value.index
def createOrders(events):
columns = ["Year", "Month", "Day", "Stock", "OrderType", "Amount"]
orders = pd.DataFrame(columns=columns)
events.applymap(lambda x: appendOrder(orders,x))
上面的代码在 appendOrder 方法中中断,因为 value 没有索引。
在 DataFrame 上使用 applymap 时,是否仍然保留索引和列信息?
编辑
以下是事件 DataFrame 的片段:
SPY GOOG AAPL XOM
2013-10-1-16:00:00 NaN 1 NaN 1
2013-10-2-16:00:00 NaN NaN NaN NaN
2013-10-3-16:00:00 NaN NaN NaN NaN
2013-10-4-16:00:00 1 NaN NaN NaN
2013-10-5-16:00:00 NaN NaN NaN NaN
2013-10-6-16:00:00 1 NaN 1 NaN
2013-10-7-16:00:00 NaN NaN NaN NaN
2013-10-8-16:00:00 NaN 1 NaN NaN
我想把上面的事件DataFrame变成下面的订单DataFrame:
Year Month Day Stock OrderType Amount
0 2013 10 1 GOOG Buy 100
1 2013 10 1 XOM Buy 100
2 2013 10 4 SPY Buy 100
3 2013 10 6 SPY Buy 100
4 2013 10 6 AAPL Buy 100
5 2013 10 8 GOOG Buy 100
我希望这让它更清楚一点。