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

如何将值为列表的字典转换为展示值计数的DataFrame

实现方法

不需要手动写循环统计频次,直接用pandas配合标准库的计数工具就能快速得到目标结果,完整代码如下:

import pandas as pd
from collections import Counter

# 原始输入字典
raw_dict = {
    1:['A','B','B','C'],
    2:['A','B','C','D','D','E','E','E','E'],
    3:['C','C','C','D','D','D','D']
}

# 统计每个索引下的元素出现次数,构造DataFrame
df = pd.DataFrame({idx: Counter(val_list) for idx, val_list in raw_dict.items()}).T.fillna(0).astype(int)
# 按字母顺序排序列,和示例输出格式对齐
df = df[sorted(df.columns)]

运行后输出的结果和你给出的目标效果完全一致:

A  B  C  D  E
1  1  2  1  0  0
2  1  1  1  2  4
3  0  0  3  4  0

代码逻辑说明

  • Counter(val_list)会直接统计当前列表里每个元素的出现次数,返回{元素值: 计数}格式的结果
  • 把每个索引对应的计数结果传入DataFrame构造器后做转置,行索引就自动对应原始字典的键
  • 计数为0的单元格默认会被填充为缺失值NaN,用fillna(0)补成0后转成整数类型即可
  • 最后对列名做排序,避免列顺序因为元素出现先后不同乱序,保证输出格式和示例一致

如果处理的数据量比较大,也可以用pandas原生的交叉统计方法实现,不需要导入Counter:

# 大数据量场景写法
s = pd.Series(raw_dict).explode().reset_index()
s.columns = ['row_idx', 'col_name']
df = pd.crosstab(s['row_idx'], s['col_name'])

这个写法的输出结果和上面完全一致,crosstab会自动统计行、列维度的共现次数,不存在的组合默认填充0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:30:50