将这两件事视为相反的想法是否正确?这一直是我困惑的一个主要原因。
下面是我在 R 和 Python 中查找数据框的列总和的示例。请注意 MARGIN
和 axis
的相反值。
在 R 中(使用 MARGIN=2
,即列边距):
m <- matrix(1:6, nrow=2)
apply(m, MARGIN=2, mean)
[1] 1.5 3.5 5.5
在Python中(使用axis=0
,即行轴):
In [25]: m = pd.DataFrame(np.array([[1, 3, 5], [2, 4, 6]]))
In [26]: m.apply(np.mean, axis=0)
Out[26]:
0 1.5
1 3.5
2 5.5
dtype: float64
最佳答案
之所以会出现困惑,是因为 apply()
既讨论了应用“超过”哪个维度,也讨论了哪个维度保留。换句话说,当您对行进行 apply()
时,结果是一个向量,其长度是输入中的列数。 Pandas 的文档(但不是 R 的)强调了这种特殊的困惑:
axis : {0 or ‘index’, 1 or ‘columns’}
0 or ‘index’: apply function to each column
1 or ‘columns’: apply function to each row
如您所见,0
表示索引(行)维度被保留,列维度被“应用”(从而被消除)。
换句话说,对列的应用是 axis=0
或 MARGIN=2
,对行的应用是 axis=1
或 MARGIN=1
。 1
值似乎匹配,但这是虚假的:Python 中的 1
是第二个维度,因为 Python 是从 0 开始的。
关于python - pandas/numpy 的轴与 R 的 MARGIN 相反吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47254587/