2015-12-03 68 views
0

當我試圖用大熊貓板時,瞭解這個怪異的行爲交換。如果我沿着面板的major_axis或minor_axis取平均值,那麼座標軸似乎會被交換。熊貓面板座標軸以panel.mean

>>> panel = pd.Panel(np.random.rand(10,20,30)) 
>>> print(panel.mean(axis=0)) 
(20, 30) 
>>> print(panel.mean(axis=1)) 
(30, 10) 
>>> print(panel.mean(axis=2)) 
(20, 10) 

我會認爲對於最後兩個,輸出形狀應該分別是(10,30)和(10,20)。這是如何工作的一個三維numpy陣列,但也許有一些熊貓面板和numpy陣列,我沒有得到一些概念上的區別...

這是正確的行爲?有人可以解釋爲什麼它應該是這樣嗎?

回答

0

DataFrame設想爲Series的集合是有用的,其中每個SeriesDataFrame中的一列。

當您沿着axis=1的平均值獲取Series時,Panel中的10個項目中的每一個都有30個元素。如果您收集這10 Series您獲得與30行和10列DataFrame

同樣,當您沿着axis=2取平均值時,面板上10個項目中的每一個都會產生一個長度爲20的Series。收集這10 Series在一起給你一個DataFrame 20行10列。

當你計算沿着axis=0的意思,你獲得的平均項,預計將有相同的形狀,在面板的每個項目,即由20 30

下面一些代碼,可能有助於闡明我的點:

In [1]: panel = pd.Panel(np.random.rand(10,20,30)) 

# Note that for a single item in the panel, the mean along 
# either of its axes is a `Series`: 

In [2]: type(panel[0].mean(axis=0)) 
Out[2]: pandas.core.series.Series 

In [3]: type(panel[0].mean(axis=0)) 
Out[3]: pandas.core.series.Series 

In [3]: panel[0].mean(axis=0) 
Out[3]: 
0  0.569390 
1  0.497762 
2  0.616333 
3  0.608153 
4  0.524008 
5  0.478621 
6  0.492827 
7  0.461240 
8  0.573557 
9  0.654757 
10 0.541066 
11 0.572929 
12 0.482214 
13 0.576898 
14 0.362965 
15 0.493355 
16 0.491790 
17 0.567756 
18 0.426404 
19 0.514235 
20 0.416983 
21 0.455843 
22 0.603592 
23 0.387520 
24 0.470060 
25 0.506414 
26 0.545156 
27 0.525211 
28 0.526378 
29 0.486419 
dtype: float64