Numpy 使用panel.mean时面板轴交换

Numpy 使用panel.mean时面板轴交换,numpy,pandas,Numpy,Pandas,我试图理解使用熊猫面板时的这种奇怪行为。如果我沿着面板的长轴或短轴取平均值,这些轴似乎被交换了 >>> 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) 我

我试图理解使用熊猫面板时的这种奇怪行为。如果我沿着面板的长轴或短轴取平均值,这些轴似乎被交换了

>>> 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)。这就是3D numpy阵列的工作原理,但熊猫面板和numpy阵列之间可能存在一些概念上的差异,我不知道


这是正确的行为吗?有人能解释一下为什么会这样吗?

可以将
数据帧
看作是
系列
的集合,其中每个
系列
都是
数据帧
中的一列

当您沿着
轴=1
取平均值时,您将获得一个
系列
,其中
面板中的10个项目各有30个元素。如果您收集这10个
系列
,您将获得一个包含30行10列的
数据帧

类似地,当沿
轴取平均值=2
时,面板中10个项目的长度均为20的
系列。将这10个
系列
收集在一起,可以得到一个包含20行10列的
数据框架

当您沿
轴=0
计算平均值时,您将获得平均项目,该项目预计与面板中的每个项目具有相同的形状,即20 x 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

关于GitHub的讨论如下:

我建议你检查一下X射线-它是建立在熊猫之上的>=三维数据