带有 MultiIndex Pandas 面板的切片函数

Posted

技术标签:

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

我从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

【问题讨论】:

【参考方案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]

【讨论】:

感谢您提供快速且合格的答复。我想这就是我想要的。

以上是关于带有 MultiIndex Pandas 面板的切片函数的主要内容,如果未能解决你的问题,请参考以下文章

带有 MultiIndex 到 Numpy 矩阵的 Pandas DataFrame

根据列值对带有 MultiIndex 的 pandas DataFrame 进行排序

如何从带有列表的嵌套字典构建 MultiIndex Pandas DataFrame

Pandas:从 DataFrame 分配 MultiIndex 列

Pandas:修改特定级别的 Multiindex

使用 pandas 创建一个 multiIndex