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

Pandas的pd.crosstab指定多个aggfunc时报__dummy__错误如何解决?

Pandas crosstab __dummy__错误解决方案

错误原因

该报错是pd.crosstab在传入Python内置len函数作为聚合函数时的兼容问题:len无法适配pandas多聚合函数场景下的分组统计逻辑,触发了内部隐藏的__dummy__错误,该问题在部分旧版本pandas中尤为常见。

解决方法

方案1(最推荐,兼容性最好)

将内置函数len替换为pandas原生支持的统计关键字即可:

  • 用'size'统计每个分组的总行数(包含空值)
  • 用'count'统计每个分组的非空值行数

修改后可正常运行的完整代码:

import pandas as pd
import numpy as np

c1 = np.repeat(['a','b'], [50, 50], axis=0)
c2 = list('xy'*50)
c3 = np.repeat(['G1','G2'], [50, 50], axis=0)
np.random.shuffle(c3)
c4=np.repeat([1,2], [50,50],axis=0)
np.random.shuffle(c4)
val = np.random.rand(100)

df = pd.DataFrame({'c1':c1, 'c2':c2, 'c3':c3, 'c4':c4, 
'val':val})
print(df)
table  = pd.crosstab([df.c1,df.c2], [df.c3,df.c4], 
values=df.val, aggfunc=['size', np.mean])
print(table)

方案2(适用于自定义统计逻辑场景)

如果需要自定义长度统计逻辑,可以用lambda封装适配pandas的分组输入格式:

table  = pd.crosstab([df.c1,df.c2], [df.c3,df.c4], 
values=df.val, aggfunc=[lambda x: len(x), np.mean])

两种方案运行后都会返回符合预期的交叉表结果,行索引为c1、c2的多级组合,列索引为c3、c4的多级组合,每个单元格包含分组样本量和均值两个统计值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:54:04