You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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的索引是MonthYear的多级索引):

# 定位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

火山引擎 最新活动