具有MultiIndex Pandas面板的切片功能
-
26-12-2019 - |
题
具有MultiIndex Pandas面板的切片功能
我创建了一个 Panel
从 Pandas
用一个 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.6
和 IPython 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]
不隶属于 StackOverflow