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

Pandas groupby触发unhashable type: 'DataFrame'类型错误

问题原因

报错和你筛选的大额损失子集没有关系,根源是函数里的列表引用赋值bug:

  • 函数内agg_list = sum_list没有创建新列表,只是给传入的sum_list起了个别名,后续修改agg_list[i]时会直接改动外部传入的原始列表
  • 第一次调用loss_by_entity处理全量数据时,循环会把原始Loss_Type列表里的3个列名字符串,逐个替换成聚合后的DataFrame对象
  • 第二次调用函数时,传入的Loss_Type已经不是存字符串的列名列表了,里面全是DataFrame对象。执行data.groupby(col_list)[item]时,pandas会把item(也就是DataFrame)当做要选取的列名,而DataFrame是不可哈希类型,直接触发unhashable type: 'DataFrame'报错
修复代码

函数内不要直接引用传入的sum_list,单独初始化空列表存放聚合结果即可,避免污染外部变量:

def loss_by_entity(data, col_list, sum_list):
    agg_list = []
    for item in sum_list:
        single_agg = data.groupby(col_list)[item].sum()
        single_agg = pd.DataFrame(single_agg)
        single_agg['Loss_Type'] = item
        agg_list.append(single_agg)
    agg_data = pd.concat(agg_list)
    return agg_data
补充说明

这个bug属于Python可变对象传参的常见坑:列表、字典这类可变对象作为参数传入函数时,函数内对对象本身的修改会同步作用到外部原始对象。如果需要在函数内处理参数列表,优先创建副本或者初始化新容器承接处理结果,避免意外修改原始数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:45:38