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

Pandas技术问题:筛选唯一值数量最多的列

找出Pandas DataFrame中唯一值数量最多的列并筛选

嘿,我来帮你搞定这个问题!你的思路是对的,但可以用更简洁的Pandas原生方法来实现,不用手动写循环~

第一步:简化唯一值统计

你原来的循环可以直接替换成一行代码,因为select_dtypes返回的DataFrame直接调用nunique()会自动统计每列的唯一值数量,返回一个索引为列名、值为对应唯一值数的Series:

# 先筛选数值列
numeric_columns = df.select_dtypes(include=['int', 'float'])
# 直接统计每列唯一值数量,得到Series
unique_counts = numeric_columns.nunique()

第二步:找到唯一值最多的列

用Series的idxmax()方法就能直接拿到唯一值数量最高的列名,这比手动找最大值要高效得多:

# 获取唯一值数量最多的列名
max_unique_col = unique_counts.idxmax()

如果有多个列的唯一值数量并列最高,idxmax()会返回第一个出现的列名;如果需要所有并列最高的列,可以用布尔索引筛选:

# 获取所有唯一值数量等于最大值的列名
max_unique_cols = unique_counts[unique_counts == unique_counts.max()].index.tolist()

第三步:根据该列筛选整个DataFrame

接下来你提到要根据这一列对整个DataFrame进行筛选,这里举几个常见的场景示例:

  • 场景1:筛选该列中某个特定值对应的所有行
    比如筛选max_unique_col列等于100的行:
    filtered_df = df[df[max_unique_col] == 100]
    
  • 场景2:保留该列中唯一值对应的行(即去重,只保留该列每个唯一值的第一行)
    filtered_df = df.drop_duplicates(subset=[max_unique_col], keep='first')
    
  • 场景3:筛选该列非空/非缺失值的行
    filtered_df = df[df[max_unique_col].notna()]
    

这样整个流程就清晰又高效啦,完全利用Pandas的内置方法,比手动循环简洁很多~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:43:16