我想沿pandas的短轴扩展面板数据框架。我开始创建的dic,DataFrame以生成面板。
dic
DataFrame
import pandas as pd import numpy as np rng = pd.date_range('1/1/2013',periods=100,freq='D') df1 = pd.DataFrame(np.random.randn(100, 4), index = rng, columns = ['A','B','C','D']) df2 = pd.DataFrame(np.random.randn(100, 4), index = rng, columns = ['A','B','C','D']) df3 = pd.DataFrame(np.random.randn(100, 4), index = rng, columns = ['A','B','C','D']) pf = pd.Panel({'df1':df1,'df2':df2,'df3':df3})
如我所料,发现我的面板尺寸如下:
尺寸:3(项目)x 100(长轴)x 4(短轴)项目轴:df1至df3长轴轴:2013-01-01 00:00:00至2013-04-10 00:00:00短轴轴:A到D
我现在想向Minor轴添加一个新的数据集:
pf['df1']['E'] = pd.DataFrame(np.random.randn(100, 1), index = rng) pf['df2']['E'] = pd.DataFrame(np.random.randn(100, 1), index = rng) pf['df2']['E'] = pd.DataFrame(np.random.randn(100, 1), index = rng)
我发现添加此新的短轴后,面板数组尺寸的形状没有改变:
shape(pf)
[3,100,4]
我可以访问major_axis中每个项目的数据:
pf.ix['df1',-10:,'E']
2013-04-01 0.168205 2013-04-02 0.677929 2013-04-03 0.845444 2013-04-04 0.431610 2013-04-05 0.501003 2013-04-06 -0.403605 2013-04-07 -0.185033 2013-04-08 0.270093 2013-04-09 1.569180 2013-04-10 -1.374779频率:D,名称:E
但是,如果我将切片扩展为包括多个主轴,则:
pf.ix[:,:,'E']
然后我遇到一个错误,说“ E”未知。
任何人都可以建议我要去哪里哪里还是执行此操作的更好方法?
现在这行不通,请参阅https://github.com/pydata/pandas/issues/2578, 但是您可以通过这种方式完成所需的操作。这是一个非常便宜的操作,因为不会复制任何内容。
In [18]: x = pf.transpose(2,0,1) In [19]: x Out[19]: <class 'pandas.core.panel.Panel'> Dimensions: 4 (items) x 3 (major_axis) x 100 (minor_axis) Items axis: A to D Major_axis axis: df1 to df3 Minor_axis axis: 2013-01-01 00:00:00 to 2013-04-10 00:00:00 In [20]: x['E'] = new_df In [21]: x.transpose(1,2,0) Out[21]: <class 'pandas.core.panel.Panel'> Dimensions: 3 (items) x 100 (major_axis) x 5 (minor_axis) Items axis: df1 to df3 Major_axis axis: 2013-01-01 00:00:00 to 2013-04-10 00:00:00 Minor_axis axis: A to E