Pandas按独热编码列分组报错:TypeError: unhashable type: 'list'
解决DataFrame按独热编码列表分组的TypeError问题
你遇到的TypeError: unhashable type: 'list'是因为列表是可变类型,无法被计算哈希值,而groupby要求分组键必须是可哈希的(比如整数、字符串、元组这类不可变类型)。下面给出两种可行的解决方法:
方法1:将列表转为元组
把class列里的列表转换成元组(元组是不可变、可哈希的),就能正常执行分组操作:
import pandas as pd data = pd.DataFrame({"first": [0, 1, 2, 3, 4], "class": [[0, 1], [1, 0], [1, 0], [0, 1], [1, 0]]}) # 将列表转为元组 data["class"] = data["class"].apply(tuple) class_groups = [group_data for group_key, group_data in data.groupby("class")] print(class_groups)
方法2:拆分独热编码为多列分组
独热编码本身的设计逻辑就是用多列来表示类别,直接把列表拆成独立列,按这些列的组合分组更符合业务逻辑,后续处理也更方便:
import pandas as pd data = pd.DataFrame({"first": [0, 1, 2, 3, 4], "class": [[0, 1], [1, 0], [1, 0], [0, 1], [1, 0]]}) # 拆分列表为多列,命名为class_0、class_1 class_df = pd.DataFrame(data["class"].tolist(), columns=["class_0", "class_1"]) data = pd.concat([data, class_df], axis=1).drop("class", axis=1) # 按拆分后的多列组合分组 class_groups = [group_data for group_key, group_data in data.groupby(["class_0", "class_1"])] print(class_groups)
内容的提问来源于stack exchange,提问作者foreverska
相关产品推荐
相关产品推荐

