Python报错TypeError: unhashable type: 'list',如何按list分组聚合?
解决Pandas中按List类型字段分组的问题
报错原因
你遇到的TypeError: unhashable type: 'list'是因为Python的列表(list)是可变类型,不具备哈希性,而groupby要求分组键必须是可哈希的(比如字符串、元组、数值类型等),直接用list分组会触发这个错误。
解决方案
核心思路是把不可哈希的list转换成可哈希的类型(比如元组tuple),再进行分组操作,最后可按需转回list类型。下面是两种实用的实现方式:
方法一:分组时直接转换为元组
# 按转换后的元组分组,对value求和,重置索引后转回list类型 df_output = df.groupby(df['pattern'].apply(tuple))['value'].sum().reset_index() df_output['pattern'] = df_output['pattern'].apply(list) # 调整列顺序匹配目标结果 df_output = df_output[['value', 'pattern']]
方法二:先创建临时元组列再分组
如果需要更直观的步骤,可以先新增元组类型的临时列,分组完成后再清理:
# 新增临时元组列 df['pattern_tuple'] = df['pattern'].apply(tuple) # 按临时列分组求和 df_output = df.groupby('pattern_tuple')['value'].sum().reset_index() # 转回list类型并删除临时列 df_output['pattern'] = df_output['pattern_tuple'].apply(list) df_output = df_output.drop('pattern_tuple', axis=1)[['value', 'pattern']]
注意点
你原来的代码使用了count(),但需求是对value字段求和,所以要替换成sum()才能得到目标结果。
内容的提问来源于stack exchange,提问作者Economist_Ayahuasca
相关产品推荐
相关产品推荐

