You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Django Query按字段提取各字段的最频繁值?

获取Django模型各字段的最频繁值

方法一:使用Django ORM聚合查询(推荐)

直接在数据库层面完成统计,效率更高,适合大数据量场景:

from django.db.models import Count
from collections import namedtuple

def get_most_frequent_values():
    # 对每个字段分组统计出现次数,取次数最多的第一个值
    a_most = myTable.objects.values('a').annotate(count=Count('a')).order_by('-count').first()['a']
    b_most = myTable.objects.values('b').annotate(count=Count('b')).order_by('-count').first()['b']
    c_most = myTable.objects.values('c').annotate(count=Count('c')).order_by('-count').first()['c']
    d_most = myTable.objects.values('d').annotate(count=Count('d')).order_by('-count').first()['d']
    
    # 返回命名元组,格式与期望一致
    MostFrequent = namedtuple('MostFrequent', ['a', 'b', 'c', 'd'])
    return MostFrequent(a=a_most, b=b_most, c=c_most, d=d_most)

调用函数后会得到MostFrequent(a=2, b=4, c=1, d=3),完全符合你的需求。

方法二:Python内存统计(适合小数据量)

如果数据量较小,可以将所有数据拉取到内存,用collections.Counter统计:

from collections import Counter, namedtuple

def get_most_frequent_values():
    all_records = myTable.objects.all()
    
    # 提取各字段的所有值
    a_values = [obj.a for obj in all_records]
    b_values = [obj.b for obj in all_records]
    c_values = [obj.c for obj in all_records]
    d_values = [obj.d for obj in all_records]
    
    # 取出现次数最多的值(most_common(1)返回(值,次数)的元组,取第一个元素的值)
    a_most = Counter(a_values).most_common(1)[0][0]
    b_most = Counter(b_values).most_common(1)[0][0]
    c_most = Counter(c_values).most_common(1)[0][0]
    d_most = Counter(d_values).most_common(1)[0][0]
    
    MostFrequent = namedtuple('MostFrequent', ['a', 'b', 'c', 'd'])
    return MostFrequent(a=a_most, b=b_most, c=c_most, d=d_most)

注意事项

  • 若字段存在多个值出现次数相同的情况(如所有值仅出现一次),两种方法都会返回排序后的第一个值,可根据需求调整排序逻辑。
  • 方法一的ORM查询性能更优,数据量大时优先选用。

内容的提问来源于stack exchange,提问作者sablam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:30:53