Pandas使用agg()报Series可变无法哈希错误,如何实现类似R summarise功能
问题原因
- 你的
agg参数格式不符合Pandas命名聚合的规范:Pandas命名聚合要求传入的元组结构为(目标列名, 聚合函数),你直接把筛选后的Series对象放到了元组第一位,agg会尝试把该位置的元素作为哈希索引,而Series是可变对象,不支持哈希,因此触发报错。 - 你没有把条件筛选的逻辑放到聚合函数内部执行,无法在聚合步骤中同步完成过滤计算。
正确实现方式
你可以通过lambda匿名函数在聚合逻辑中嵌入条件筛选,一步完成多维度聚合,和R的summarise效果完全对齐:
import pandas as pd indi = pd.DataFrame({"PONDERA":[1,2,3,4], "ESTADO": [1,1,2,2]}) # 单指标计算,对应你的需求 empleo = indi.agg( ocupados = ('PONDERA', lambda x: x[indi['ESTADO']==1].sum()) ) # 多指标同步计算,完全对齐你给的R代码逻辑 empleo = indi.agg( poblacion = ('PONDERA', 'sum'), ocupados = ('PONDERA', lambda x: x[indi['ESTADO']==1].sum()) )
多指标计算的输出结果:
poblacion ocupados 0 10 3
单指标计算的输出和你预期完全一致:
ocupados 0 3
内容的提问来源于stack exchange,提问作者juanmac
相关产品推荐
相关产品推荐

