Python 如何删除顶部和底部第n%的数据
我正在创建一个函数来计算修剪后的平均值。为此,我删除了数据的最高和最低百分比,然后像往常一样计算平均值。到目前为止,我得到的是:Python 如何删除顶部和底部第n%的数据,python,numpy,Python,Numpy,我正在创建一个函数来计算修剪后的平均值。为此,我删除了数据的最高和最低百分比,然后像往常一样计算平均值。到目前为止,我得到的是: def trimmed_mean(data, percent): from numpy import percentile if percent < 50: data_trimmed = [i for i in data if i > percentile(data, per
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))
def-trimmed_平均值(数据,百分比):
从numpy导入百分比
如果百分比<50:
数据_trimmed=[i代表数据中的i
如果i>百分位(数据,百分比)
和i<百分位数(数据,100%)
其他:
数据_trimmed=[i代表数据中的i
如果i<百分位(数据,百分比)
和i>百分位数(数据,100%)
返回和(数据修剪)/浮动(长度(数据修剪))
但我确实得到了错误的结果。所以,对于[37,33,33,32,29,28,28,23,22,22,21,21,20,20,19,19,18,18,16,15,14,14,14,12,12,9,6]
来说,10%的平均值应该是20.16
,而我得到20.0
在python中,有没有其他方法可以删除顶部和底部数据?
还是我做错了什么 我建议先对数组进行排序,然后在中间取一个“切片” 在这里:
你可以看看这个相关的问题: 简而言之,对于scipy version>0.14.0,以下内容完成了这项工作
from scipy import stats
m = stats.trim_mean(X, percentage)
如果您不想依赖外部库,那么您当然可以恢复到其答案中所示的方法。也许这会奏效:
data = [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]
percent = .1 # == 10%
def trimmed_mean(data, percent):
# sort list
data = sorted(data)
# number of elements to remove from both ends of list
g = int(percent * len(data))
# remove elements
data = data[g:-g]
# cast sum to float to avoid implicit casting to int
return float(sum(data)) / len(data)
print trimmed_mean(data, percent)
输出:
$ python trimmed_mean.py
20.16
@Аааааааааааааааааааааааа,也许没有必要感谢编辑您的[32,29,28,28,23,22,22,22,21,21,21,20,19,18,18,18,18,16,15,14,14,12]应该包含在数据中吗?百分位(数据,10)=12。是的,应该有12。如果楼层划分异常值=n*percent//100,效果很好。谢谢!
data = [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]
percent = .1 # == 10%
def trimmed_mean(data, percent):
# sort list
data = sorted(data)
# number of elements to remove from both ends of list
g = int(percent * len(data))
# remove elements
data = data[g:-g]
# cast sum to float to avoid implicit casting to int
return float(sum(data)) / len(data)
print trimmed_mean(data, percent)
$ python trimmed_mean.py
20.16