从每列中减去中位数
我有一个数据表,叫做 df
,里面有一些数字,长得像这样:
1 1 1
2 1 1
2 1 3
我想从每一列中减去中位数,这样每一列的中位数就变成0了。
-1 0 0
0 0 0
0 0 2
我该怎么用Python的方式来实现这个呢?我猜应该可以不需要一个一个地遍历这些值,先计算中位数再减去。我想用一种简洁的方式来做到这一点,大概是这样的:
from numpy import median
df -= median(df) #does not work, deducts median for whole dataframe
2 个回答
1
在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,:]
4
就像这样
df -= df.median(axis=0)
numpy
中的median
函数可以计算一组数据的中位数。要使用numpy
来实现这个功能,可以试试下面的代码。
df -= median(df, axis=0)
想了解更多细节,可以查看这个文档:http://docs.scipy.org/doc/numpy/reference/generated/numpy.median.html