sut*_*tee 10 python django aggregate-functions
Django的开发版本具有聚合函数,如Avg,Count,Max,Min,StdDev,Sum和Variance(链接文本).列表中是否缺少中位数?
实现一个似乎很容易.我错过了什么吗?幕后的聚合功能有多少?
Mar*_*ian 21
这是你缺少的功能.传递一个查询集和要查找中位数的列的名称:
def median_value(queryset, term):
    count = queryset.count()
    return queryset.values_list(term, flat=True).order_by(term)[int(round(count/2))]
这并不像其他一些反应似乎表明的那么难.重要的是让db排序完成所有工作,所以如果你已经将列编入索引,这是一个超级便宜的操作.
(更新2016年1月28日) 如果你想对偶数项的中位数定义更严格,那么这将平均两个中间值的值.
def median_value(queryset, term):
    count = queryset.count()
    values = queryset.values_list(term, flat=True).order_by(term)
    if count % 2 == 1:
        return values[int(round(count/2))]
    else:
        return sum(values[count/2-1:count/2+1])/Decimal(2.0)
那么,原因可能是您需要跟踪所有数字来计算中位数.Avg,Count,Max,Min,StDev,Sum和Variance都可以根据不断的存储需求进行计算.也就是说,一旦你"记录"了一个数字,你就再也不需要了.
FWIW,您需要跟踪的变量是:min,max,count,<n>= avg,<n^2>= avg的值的平方.
| 归档时间: | 
 | 
| 查看次数: | 4651 次 | 
| 最近记录: |