首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将PD df转换为multiindex?

如何将PD df转换为multiindex?
EN

Stack Overflow用户
提问于 2020-04-28 07:23:52
回答 1查看 22关注 0票数 0

我有一个df,它有两个符号‘间谍’和'JPM‘在sym_df中的adj接近价格。我想创建一个多索引df,以便能够在每个符号上运行测试。目前,我是一次做所有的股票,但习惯于用pd多指数df一次性做所有的事情。

我知道pd面板已经被弃用了,所以我正在寻找一种不同的方法来创建3D df。

代码语言:javascript
运行
复制
>>>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'>
EN

回答 1

Stack Overflow用户

发布于 2020-04-28 07:54:05

您使用了圆括号()而不是方括号[]。此外,您所做的工作可以缩短为一个命令:

代码语言:javascript
运行
复制
df = sym_df.unstack().to_frame('Adj_Close_Price')
df.loc['SPY']

结果:

代码语言:javascript
运行
复制
            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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61470126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档