Python分组数据筛选报错:TypeError: 'method' object is not subscriptable
解决方法:TypeError: 'method' object is not subscriptable 问题
嘿,这个问题我之前也踩过坑!咱们一步步来拆解解决:
首先得揪出问题根源:你写的代码里,unstack后面没有加括号()——在Pandas里,unstack是一个方法,必须调用它(也就是加())才会返回聚合后的DataFrame。如果不加括号,group_date就只是一个方法对象,而不是可以切片的数据结构,自然会抛出“'method' object is not subscriptable”的错误。
步骤1:修正分组聚合代码
先把unstack补全括号,得到正确的分组结果:
# 注意unstack后面的(),这才是真正调用方法生成数据结构 group_date = dd.groupby(['Month','Year','PartId'])['revenue'].sum().unstack()
- 默认情况下,
unstack()会把最后一个分组键(这里是PartId)转为列;如果想指定其他分组键转列,可以传level参数,比如unstack(level='Year'),根据你的需求调整就行。
步骤2:选择性查看指定分组
针对2万行的数据集,有两种高效的方式查看Month=1、Year=2010的分组:
方式一:先聚合再筛选(适合需要保留完整分组结构的场景)
如果已经生成了完整的group_date,可以用loc精准定位(前提是group_date的索引是Month和Year的多级索引):
# 定位Month=1且Year=2010的所有行 target_group = group_date.loc[(1, 2010), :]
你可以先通过group_date.index查看索引结构,确认切片的方式是否正确。
方式二:先筛选再聚合(适合大数据集,性能更优)
因为你的数据有2万行,先筛选出目标月份和年份的行,再做分组聚合,能减少计算量,效率更高:
# 先过滤出Month=1、Year=2010的数据,再按PartId分组求和 target_group = dd[(dd['Month'] == 1) & (dd['Year'] == 2010)]\ .groupby('PartId')['revenue'].sum()
小提示
如果unstack后出现缺失值(比如某些PartId在指定月份没有数据),可以用fillna(0)填充,避免后续操作出错:
group_date = dd.groupby(['Month','Year','PartId'])['revenue'].sum().unstack().fillna(0)
内容的提问来源于stack exchange,提问作者IndigoChild




