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

使用GroupBy后调用unstack()报AttributeError问题求助

问题解决:AttributeError: 'SeriesGroupBy' object has no attribute 'unstack'

错误原因

你遇到的错误是因为ort变量实际是SeriesGroupBy对象,而非聚合后的结果。只有对GroupBy对象执行聚合操作(比如mean())后,得到的带多级索引的Series/DataFrame才支持unstack()方法。

检查你的代码,大概率是实际运行时遗漏了.mean()调用——如果只写df["data1"].groupby([df["key1"], df["key2"]]),得到的就是GroupBy对象,自然没有unstack属性。

正确实现方式

方法1:确保执行聚合后再unstack

你的代码写法本身是正确的,只要确保完整执行聚合步骤:

import pandas as pd
import numpy as np

# 初始化DataFrame
df = pd.DataFrame({"key1": list("aabbab"),
                   "key2": list(["one", "two", "three"]*2),
                   "data1": np.random.randn(6),
                   "data2": np.random.randn(6)})

# 分组聚合后得到带多级索引的Series,再执行unstack
ort = df["data1"].groupby([df["key1"], df["key2"]]).mean()
result = ort.unstack()
print(result)

方法2:直接用pivot_table实现透视需求

如果你的核心需求是按key1和key2分组求data1的均值并透视,也可以直接用pivot_table一步完成,代码更简洁:

result = df.pivot_table(values="data1", index="key1", columns="key2", aggfunc="mean")
print(result)

方法3:先unstack再聚合(等价写法)

也可以先对GroupBy对象执行unstack,再调用聚合函数,效果和方法1一致:

result = df["data1"].groupby([df["key1"], df["key2"]]).unstack().mean()

验证说明

执行聚合操作后,ort会变成一个带有两级索引(key1, key2)的Series,此时调用unstack()会将第二级索引(key2)转为列,实现透视效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:33:14