使用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
相关产品推荐
相关产品推荐

