【问题标题】:Slice Function with a MultiIndex Pandas Panel带有 MultiIndex Pandas 面板的切片函数
【发布时间】:2014-05-28 12:05:46
【问题描述】:

带有 MultiIndex Pandas 面板的切片函数

我从PandasMultiIndex 创建了一个Panel 构造(参见代码)。如果没有MultiIndex,我可以使用简单的命令将Panel 分割成DataFrame

PanelData.major_xs('A')
PanelData.minor_xs('zTwo')

如果我对MultiIndex Panel 进行切片,结果将是Panel。我该怎么做才能得到DataFrame 回来(切片3D Panel => 2D DataFrame)?为什么 3D 切片的结果 Panel 也是 Panel ?如果可能,结果应该是从“2010-01-01”到“2010-01-03”所有区域(“zOne”-“zFour”)的DataFrame

import pandas as pd

ListLetter = ['A', 'B', 'C', 'D']
ListCode = [2, 1, 1, 0]
ListZone = ['zOne', 'zTwo', 'zThree', 'zFour']
ListRegion = ['USA', 'CH', 'NZ', 'CH']
index = pd.MultiIndex.from_arrays([ListLetter, ListCode], names=['letter', 'code'])
columns =  pd.MultiIndex.from_arrays([ListZone, ListRegion], names=['zone', 'region'])

PanelData = pd.Panel({'2010-01-01': pd.DataFrame(index=index, columns=columns)})
PanelData['2010-01-02'] = pd.DataFrame(index=index, columns=columns)
PanelData['2010-01-03'] = pd.DataFrame(index=index, columns=columns)
PanelData

面板数据:

<class 'pandas.core.panel.Panel'>
Dimensions: 3 (items) x 4 (major_axis) x 4 (minor_axis)
Items axis: 2010-01-01 to 2010-01-03
Major_axis axis: (A, 2) to (D, 0)
Minor_axis axis: (zOne, USA) to (zFour, CH)

注意:我使用的是 Python v.2.7.6IPython v.1.2.1

【问题讨论】:

    标签: python pandas panel slice multi-index


    【解决方案1】:

    我认为,当你在 Pandas 面板中切片 MultiIndex 的轴时,因为索引是 MultiIndex,切片后索引仍然存在(在本例中为 Items axis: 2 to 2),因此结果仍然是 @987654323 @

    In [67]:
    
    PanelData.swapaxes(0,1).xs('A', 0)
    Out[67]:
    <class 'pandas.core.panel.Panel'>
    Dimensions: 1 (items) x 3 (major_axis) x 4 (minor_axis)
    Items axis: 2 to 2
    Major_axis axis: 2010-01-01 to 2010-01-03
    Minor_axis axis: (zOne, USA) to (zFour, CH)
    

    所以如果我们使用一个稍微不同的MultiIndex切片方法,返回的是DataFrame

    In [68]:
    
    print PanelData.swapaxes(0,1).loc[('A',2),]
    zone       zOne zTwo zThree zFour
    region      USA   CH     NZ    CH
    2010-01-01  NaN  NaN    NaN   NaN
    2010-01-02  NaN  NaN    NaN   NaN
    2010-01-03  NaN  NaN    NaN   NaN
    
    [3 rows x 4 columns]
    

    【讨论】:

    • 感谢您提供快速且合格的答复。我想这就是我想要的。
    猜你喜欢
    • 2017-03-28
    • 2018-12-29
    • 2020-06-29
    • 2017-05-08
    • 2021-01-03
    • 2018-10-21
    • 2021-02-06
    • 1970-01-01
    • 2020-09-10
    相关资源
    最近更新 更多