我正在创建一个函数来计算均值。为此,我删除了数据的最高和最低百分比,然后照常计算平均值。到目前为止,我有:
def trimmed_mean(data, percent):
from numpy import percentile
if percent < 50:
data_trimmed = [i for i in data
if i > percentile(data, percent)
and i < percentile(data, 100-percent)]
else:
data_trimmed = [i for i in data
if i < percentile(data, percent)
and i > percentile(data, 100-percent)]
return sum(data_trimmed) / float(len(data_trimmed))
但是我确实得到了错误的结果。因此,[37, 33, 33, 32, 29, 28, 28, 23, 22, 22, 22, 21, 21, 21, 20, 20, 19, 19, 18, 18, 18, 18, 16, 15, 14, 14, 14, 12, 12, 9, 6]
按10%的平均水平应该是20.16
我得到的20.0
。
还有其他方法可以删除python中的顶部和底部数据吗?还是我做错了什么?
您可以看一下这个相关的问题:Python中带有百分比限制的均值修整了吗?
简而言之,scipy版本> 0.14.0,以下工作即可完成
from scipy import stats
m = stats.trim_mean(X, percentage)
如果您不想依赖于外部库,那么您当然可以恢复为Chip Grandits答案中所示的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句