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

如何高效将pandas DataFrame列表转为列-值对计数字典

多DataFrame列值对计数字典高效实现

原三步实现方案存在多轮重复遍历的性能问题,完全可以通过单次遍历完成字典构建和计数,不需要提前做元组提取、去重初始化的预处理操作。

优化思路

  • 用collections.defaultdict(int)作为计数容器,遍历过程中动态新增键,不需要提前收集所有可能的(列名, 取值)元组做初始化
  • 逐DataFrame处理时,直接提取每一列的去重有效值,同一个DataFrame中重复出现的(列名, 取值)只计数1次,完全匹配原逻辑的计数规则(即只要值在当前df对应列存在就加1,不统计单df内的行级出现次数)
  • 全流程仅做一次全量遍历,没有双层循环的重复校验开销,时间复杂度从原方案的O(总数据量 + 唯一键数*df总数)降到O(总数据量),性能提升明显。

实现代码

from collections import defaultdict
import pandas as pd

def count_col_val_pairs(df_list: list[pd.DataFrame]) -> dict:
    count_res = defaultdict(int)
    for df in df_list:
        # 逐列提取非空唯一值
        for col in df.columns:
            # 跳过空值,取当前列所有不重复的取值
            for val in df[col].dropna().unique():
                count_res[(col, val)] += 1
    return dict(count_res)

逻辑对齐说明

  • 自动过滤NaN空值,和原方案提取有效元组的逻辑一致
  • 单df内同一列的相同取值不会重复计数,和原方案“检查取值是否存在于当前df对应列,存在则计数+1”的规则完全一致
  • 不需要任何前置预处理步骤,遍历过程中同步完成键创建、计数累加两个操作,没有冗余计算

如果单df数据量极大,可以将取唯一值的操作替换为pd.unique(df[col].dropna()),该方法不会对结果做排序,速度比默认的unique()更快。

内容的提问来源于stack exchange,提问作者Ammar Sabir Cheema

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:36:19