如何获取Pandas DataFrame经groupby分组后的行号?
解决分组后获取行号列表的TypeError问题
哈哈,这个错误我之前也踩过坑!问题出在你把index当成方法调用了——它其实是一个属性,不需要加括号哒。
先明确你的DataFrame结构,方便后续演示:
import pandas as pd df = pd.DataFrame({ 'uid': [1, 2, 1, 1], 'label': [0, 1, 1, 0] }, index=[0, 1, 2, 7])
错误原因分析
你执行group.index()时报错TypeError: 'Int64Index' object is not callable,是因为分组后的对象(比如grouped = df.groupby('uid'))里,index是一个存储行索引的属性,不是可调用的函数,加括号自然会触发错误。
两种正确实现方式
- 方式一:获取特定分组的行号列表
如果你只需要某个uid对应的行号(比如uid=1),可以先通过get_group()拿到该组的DataFrame,再提取索引转成列表:
grouped = df.groupby('uid') # 获取uid=1对应的行号列表 target_row_numbers = grouped.get_group(1).index.tolist() print(target_row_numbers) # 输出: [0, 2, 7]
- 方式二:遍历所有分组的行号
分组对象的groups属性是一个字典,键是分组的uid值,值就是对应组的行索引集合,你可以直接遍历提取:
for uid, row_indices in grouped.groups.items(): print(f"uid={uid}的行号列表:{row_indices.tolist()}") # 输出结果: # uid=1的行号列表:[0, 2, 7] # uid=2的行号列表:[1]
内容的提问来源于stack exchange,提问作者Flo
相关产品推荐
相关产品推荐

