0

我正在对一些股票进行事件研究,这会产生一个 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

我希望这让它更清楚一点。

4

1 回答 1

0

熊猫操作的基础称为stack

df.stack()
Out[25]: 
2013-10-1-16:00:00  GOOG    1
                    XOM     1
2013-10-4-16:00:00  SPY     1
2013-10-6-16:00:00  SPY     1
                    AAPL    1
2013-10-8-16:00:00  GOOG    1

从上面的堆叠数据框中处理和调整数据很简单。您可以通过重置索引,将其拆分为年月日列,然后将数学应用于现在位于单个列中的非 NaN 数据。

于 2013-10-08T19:51:50.943 回答