带有 MultiIndex Pandas 面板的切片函数
Posted
技术标签:
【中文标题】带有 MultiIndex Pandas 面板的切片函数【英文标题】:Slice Function with a MultiIndex Pandas Panel 【发布时间】:2014-05-28 12:05:46 【问题描述】:我从Pandas
和MultiIndex
创建了一个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.6
和 IPython 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