具有MultiIndex Pandas面板的切片功能

我创建了一个 PanelPandas 用一个 MultiIndex (见代码)。没有 MultiIndex 我可以把 Panel 到一个 DataFrame 使用简单的命令:

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

如果我把 MultiIndex Panel, ,结果将是一个 Panel.我能做些什么来获得一个 DataFrame 背面(切片3D Panel =>2D DataFrame)?为什么用3d切片的结果 Panel a Panel 也是?如果可能的话,结果应该是 DataFrame 从"2010-01-01"到"2010-01-03",所有区域("区域"-"zFour")。

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.

有帮助吗?

解决方案

我想,当你在Pandas面板中切片MultiIndex的一个轴时,因为索引是 MultiIndex, ,切片后索引仍然存在(在这种情况下 Items axis: 2 to 2),因此结果仍然是一个 Panel

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]
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top