Pandas数据框列的中位数

13

我有一个数据框 df:

name   count    
aaaa   2000    
bbbb   1900    
cccc    900    
dddd    500    
eeee    100

我想筛选出count列值与中位数相差不超过10的行。

我已经用 df['count'].median() 找到了中位数,但是不知道该如何进一步操作。您可以建议我如何使用pandas/numpy吗?

期望输出:

name count distance from median

aaaa  2000   *****

我可以使用任何度量作为到中位数的距离(例如与中位数的绝对偏差、分位数等)。


你期望的输出是什么? - Zero
预期输出未在原帖中显示。 - Ssank
3个回答

27

如果你正在寻找如何计算中位数绝对偏差(Median Absolute Deviation)的方法 -


In [1]: df['dist'] = abs(df['count'] - df['count'].median())

In [2]: df
Out[2]:
   name  count  dist
0  aaaa   2000  1100
1  bbbb   1900  1000
2  cccc    900     0
3  dddd    500   400
4  eeee    100   800

In [3]: df['dist'].median()
Out[3]: 800.0

4

如果你想看到中位数,可以使用 df.describe()。50% 的值就是中位数。


你能否也说明一下25%和75%到底是什么意思? - Prometheus
@Prometheus,这将是列表的第一和第三四分位数。 - Prajeeth Emanuel

1

中位数绝对偏差,

(保留HTML)

                                               enter image description here

一列的计算也可以使用statsmodels.robust.scale.mad进行,该函数还可以传递一个标准化常数c,在这种情况下,c只是1。
>>> from statsmodels.robust.scale import mad
>>> mad(df['count'], c=1)
800.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接