我有一个数据框,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
答案 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,:]