python - Pandas、scipy 和 numpy 的 MAD 结果不同

标签 python pandas numpy scipy

我想计算 MAD (median absolute deviation)

MAD = median(|x_i - mean(x)|)

获取数字列表 x
x = list(range(0, 10)) + [1000]

但是,使用 numpy 得到的结果显着不同。 , pandas ,以及一个手工制作的实现:
from scipy import stats
import pandas as pd
import numpy as np

print(stats.median_absolute_deviation(x, scale=1)) # prints 3.0

print(pd.Series(x).mad()) # prints 164.54

print(np.median(np.absolute(x - np.mean(x)))) # prints 91.0

怎么了?

最佳答案

中值绝对偏差定义为:

median(|x_i - median(x)|

方法mad在 Pandas 中,返回平均绝对偏差。

测试:
x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1000]

stats.median_absolute_deviation(x, scale=1)
# 3.0

np.median(np.absolute(x - np.median(x)))
# 3.0

x = pd.Series(x)
(x - x.median()).abs().median()
# 3.0

关于python - Pandas、scipy 和 numpy 的 MAD 结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60092641/

相关文章:

python - 用 x 计算 x**k,k 是任意维度的数组

python - 从文本文件创建 numpy 数组的最快方法

python - 取一个 Pandas Series,其中每个元素都是一个 DataFrame 并将它们组合成一个大 DataFrame

python - 为什么 numpy 的 fft 的每一个第二个系数都是其应有的倒数?

python Pandas : Aggregate rows conditional value picking

python - 在本地集群上运行 dask 时超时 OSError

python - 为什么我的 .fetchone 函数返回 "none"?

java - 媒体转换库

python - 如何使用 pandas.Series.str.contains 搜索字符加上

python - 在特定索引处的 Pandas 数据框中插入新行