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
相关产品推荐
相关产品推荐

