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

如何在不使用循环、apply或agg的情况下统计DataFrame列唯一值并转字典

问题

给定如下数据代码:

data = {'Col1': [1, 2, 2, 3, 1],
        'Col2': ['A', 'B', 'B', 'A', 'C']}
df = pd.DataFrame(data)

希望得到如下格式的字典:

{'Col1': {1:2, 2:2, 3:1},
 'Col2': {'A':2, 'B':2, 'C':1}
}

要求:不得使用任何loop、apply或agg方法。

尝试了以下代码,但因unstack操作插入NaN值填充空缺,无法得到目标结果:

count_matrix = df.stack().groupby(level=1).value_counts()
count_matrix = count_matrix.unstack(0)
count_matrix = count_matrix.to_dict()
解决方案

可以通过pd.crosstab构建交叉表,替换无效值后转换为目标字典,全程无需使用禁用方法:

import pandas as pd
import numpy as np

data = {'Col1': [1, 2, 2, 3, 1],
        'Col2': ['A', 'B', 'B', 'A', 'C']}
df = pd.DataFrame(data)

# 构建交叉表,统计每列各值的出现次数
cross_tab = pd.crosstab(df.stack().index.get_level_values(1), df.stack().values)
# 将0值替换为NaN,删除无意义的空列,转换为整数后生成目标字典
result = cross_tab.replace(0, np.nan).dropna(axis=1).astype(int).to_dict('index')
print(result)

执行后输出:

{'Col1': {1: 2, 2: 2, 3: 1}, 'Col2': {'A': 2, 'B': 2, 'C': 1}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:29:51