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

Pandas中对DataFrame指定列唯一值计数与排序的高效实现方法

实现列唯一值计数+排序的高效方案

完全不需要硬编码逐值筛选,pandas内置的value_counts()方法就是专门为这类场景设计的,几行代码就能完成全部统计逻辑,性能和可维护性都远高于手写筛选的实现。

基础实现

读取CSV后,直接对目标列调用方法即可,默认就会完成所有唯一值的计数,并且按照出现次数从高到低自动排序:

import pandas as pd
df = pd.read_csv("wimbledons_champions_claned.csv")

# 自动统计所有唯一国籍的出现次数,默认降序排列
nationality_counts = df['Champion Nationality'].value_counts()

运行后返回的Series结构中,索引就是列里出现的全部唯一国籍值(AUS、FRA等不需要提前枚举),对应的值就是该国籍的冠军出现总次数。

常用参数与拓展用法

根据需求可以搭配内置逻辑调整统计规则,不需要改动核心代码:

  • 需要按出现次数升序排列时,加上ascending=True参数:
    nationality_counts_asc = df['Champion Nationality'].value_counts(ascending=True)
    
  • 需要将列中的空值也作为一类纳入统计时,加上dropna=False参数(默认配置下空值会被自动排除):
    nationality_counts_with_na = df['Champion Nationality'].value_counts(dropna=False)
    
  • 需要将统计结果转为标准DataFrame方便后续分析时,调用to_frame()重命名列即可:
    nationality_counts_df = df['Champion Nationality'].value_counts().to_frame(name='total_champions')
    
  • 如果需要按国籍代码的字母顺序排序、而非按出现次数排序,可以在调用方法后再接sort_index():
    nationality_counts_sorted_by_code = df['Champion Nationality'].value_counts().sort_index()
    

方案对比优势

和硬编码逐值筛选的实现相比:

  • 不需要提前知道列里有多少类唯一值、每个值的具体编码,哪怕后续数据集更新新增了国籍类型,代码也不需要修改就能自动完成统计
  • 基于pandas向量化计算实现,运行效率远高于逐行筛选拼接len()的写法,数据量越大性能优势越明显
  • 内置支持排序、空值处理等常用逻辑,大幅减少重复代码量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 18:36:06