我有一个带有数字的dataframe,df
,如下所示:
1 1 1
2 1 1
2 1 3
我想从每一列中减去中位数,使每一列的中位数变为0。
-1 0 0
0 0 0
0 0 2
我该怎么用吡喃的方式来做这件事?我猜这是可能的,不需要迭代的值,计算中位数,然后扣除。我想做的很简单,大概是这样的:
from numpy import median
df -= median(df) #does not work, deducts median for whole dataframe
发布于 2014-06-17 05:03:03
就像这样
df -= df.median(axis=0)
median
of numpy
计算总体数据的中值。若要使用numpy
完成任务,请尝试使用以下代码。
df -= median(df, axis=0)
有关更多细节,请参见文档:http://docs.scipy.org/doc/numpy/reference/generated/numpy.median.html
发布于 2014-06-17 05:10:39
ipython中的一些测试表明:
In [23]: A = numpy.arange(9)
In [24]: B = A.reshape((3,3))
In [25]: C = numpy.median(B,axis=0)
In [26]: D = B - C[None,:]
In [27]: B
Out[27]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
In [28]: D
Out[28]:
array([[-3., -3., -3.],
[ 0., 0., 0.],
[ 3., 3., 3.]])
In [29]: C
Out[29]: array([ 3., 4., 5.])
所以下一行得到列的中间值。
C = numpy.median(B,axis=0)
下一行从矩阵中逐列减去它。
D = B - C[None,:]
https://stackoverflow.com/questions/24264470
复制