如何将PD DF转换为多索引?

时间:2020-04-27 23:23:51

标签: python pandas

我有一个df,其sym_df中的两个符号“ SPY”和“ JPM”的收盘价接近。 我想创建一个多索引df以便能够在每个符号上运行测试。目前,我一次要进行所有库存处理,但不会使用PD Multiindex DF一次完成所有处理。

我知道pd面板已被弃用,因此我正在寻找创建3D df的另一种方法。

>>>print(sym_df)

          SPY    JPM
2010-01-04  108.27  40.87
2010-01-05  108.56  41.67
2010-01-06  108.64  41.89
2010-01-07  109.10  42.72
2010-01-08  109.46  42.62
...            ...    ...
2011-12-23  125.19  32.84
2011-12-27  125.29  32.31
2011-12-28  123.64  31.94
2011-12-29  124.92  32.69
2011-12-30  124.31  32.53

[504 rows x 2 columns]


>>>spy_df = pd.DataFrame({'Adj_Close_Price': sym_df['SPY']})
>>>data = {'SPY':spy_df}  
>>>sym_df = sym_df.drop(['SPY'], axis=1)
>>>sym_df = sym_df.rename(columns={symbol: 'Adj_Close_Price'})
>>>data[symbol] = sym_df
>>>print(data)

{'SPY':             Adj_Close_Price
2010-01-04           108.27
2010-01-05           108.56
2010-01-06           108.64
2010-01-07           109.10
2010-01-08           109.46
...                     ...
2011-12-23           125.19
2011-12-27           125.29
2011-12-28           123.64
2011-12-29           124.92
2011-12-30           124.31

[504 rows x 1 columns], 'JPM':             Adj_Close_Price
2010-01-04            40.87
2010-01-05            41.67
2010-01-06            41.89
2010-01-07            42.72
2010-01-08            42.62
...                     ...
2011-12-23            32.84
2011-12-27            32.31
2011-12-28            31.94
2011-12-29            32.69
2011-12-30            32.53

[504 rows x 1 columns]}

>>>df = pd.concat(data.values(), keys=data.keys())
>>>print(df)

                Adj_Close_Price
SPY 2010-01-04           108.27
    2010-01-05           108.56
    2010-01-06           108.64
    2010-01-07           109.10
    2010-01-08           109.46
...                         ...
JPM 2011-12-23            32.84
    2011-12-27            32.31
    2011-12-28            31.94
    2011-12-29            32.69
    2011-12-30            32.53

[1008 rows x 1 columns]

>>>print(type(df))

<class 'pandas.core.frame.DataFrame'>

1 个答案:

答案 0 :(得分:0)

您使用了方括号()而不是方括号[]。同样,您所做的也可以简化为一个命令:

df = sym_df.unstack().to_frame('Adj_Close_Price')
df.loc['SPY']

结果:

            Adj_Close_Price
2010-01-04           108.27
2010-01-05           108.56
2010-01-06           108.64
2010-01-07           109.10
2010-01-08           109.46
2011-12-23           125.19
2011-12-27           125.29
2011-12-28           123.64
2011-12-29           124.92
2011-12-30           124.31