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

使用Pandas groupby遇TypeError:不可哈希类型'series'/'numpy.ndarray'的问询

解决Pandas GroupBy中的TypeError: unhashable type问题

正确代码示例

首先修正分组键的传递方式,将多个分组键放入列表中,或者先生成处理后的新列再分组:

# 方式1:直接用列表包裹处理后的日期序列和列名
session_cnt = df.groupby(
    [df['EVENT_DATETIME'].dt.date, 'CUSTOMER_ID']
).agg(
    session_count=('SESSION_ID', 'nunique'),
    app_session_cnt=('APP_SESSION_ID', 'nunique')
).reset_index()

# 方式2:先生成日期列,再用列名分组(更清晰)
df['EVENT_DATE'] = df['EVENT_DATETIME'].dt.date
session_cnt = df.groupby(['EVENT_DATE', 'CUSTOMER_ID']).agg(
    session_count=('SESSION_ID', 'nunique'),
    app_session_cnt=('APP_SESSION_ID', 'nunique')
).reset_index()

错误原因解析

  • 第一次错误:TypeError: unhashable type 'series'
    你直接用逗号分隔传递两个Series作为分组键,但Pandas要求多个分组键必须用列表包裹。未包裹的情况下,第二个Series被误判为其他参数,而Series是可变不可哈希对象,因此触发错误。

  • 第二次错误:TypeError: unhashable type 'numpy.ndarray'
    df['CUSTOMER_ID'].values返回的numpy数组属于可变不可哈希对象,不符合分组键的要求。

出现该错误时的必查项

  • 分组键的类型:确保分组键是可哈希类型(字符串、数值、datetime、元组等),禁止直接传入Series、numpy数组、列表、字典这类不可哈希的可变对象。如果需要使用处理后的列(如提取日期),将其放入列表中作为分组键即可。
  • 分组参数的格式:多个分组键必须用列表(或元组)包裹,不能直接逗号分隔。groupby的by参数仅接受单个分组键,或包含多个分组键的可迭代容器。
  • 分组列的元素类型:检查分组列的元素是否包含不可哈希值(如列表、字典)。可以用df['目标列'].apply(type).unique()查看元素类型,排查异常值。
  • 参数传递是否混淆:避免将分组键误传给groupby的其他参数(如axis),这会导致类型不匹配的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:16:13