从每列中扣除中位数

时间:2014-06-17 12:57:48

标签: python numpy pandas

我有一个数据框,df带有数字,如下所示:

1 1 1
2 1 1
2 1 3

我想从每列中扣除中位数,使每个列的中位数变为0。

-1 0 0
0 0 0
0 0 2

我如何以pythandic方式执行此操作?我猜测没有迭代值,计算中位数然后扣除它是可能的。我想简洁地做到这一点,大致如此:

from numpy import median
df -= median(df) #does not work, deducts median for whole dataframe

2 个答案:

答案 0 :(得分:4)

就像这样

df -= df.median(axis=0)
median的{​​p} numpy计算整体数据的中位数。 要完成numpy的使用,请尝试使用此代码。

df -= median(df, axis=0)

有关详细信息,请参阅文档:http://docs.scipy.org/doc/numpy/reference/generated/numpy.median.html

答案 1 :(得分: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,:]