从每列中减去中位数

0 投票
2 回答
888 浏览
提问于 2025-04-18 10:04

我有一个数据表,叫做 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

撰写回答