如何获取pandas groupby返回的Series的索引标签
实现方案
你原有代码的问题出在循环逻辑:for item in summed_entries:这种写法,每次迭代拿到的是纯数值(也就是对应用户的累计工时),完全没有携带作为Series索引的用户名信息,自然没法在print里输出用户名。可通过两种方式实现需求:
方案1:循环同步提取索引与值
修改原有循环逻辑,遍历时同步拿到Series的索引和对应数值:
summed_entries = df.groupby('User')['Hours'].sum() # 遍历同步获取索引(用户名)和对应值(累计工时) for username, total_hours in summed_entries.items(): if total_hours < 40: print(username)
注:旧版本pandas中使用
iteritems()方法实现同等效果,新版本已统一替换为items()
方案2:pandas原生布尔筛选(更推荐)
不需要手写逐行判断逻辑,直接通过Series的条件索引完成筛选,运行效率更高,尤其适配大体积时间卡数据:
- 对聚合后的Series做条件判断,直接过滤出累计工时不足40小时的条目
- 从过滤结果中提取作为索引的用户名列表
对应代码:
summed_entries = df.groupby('User')['Hours'].sum() # 筛选累计工时<40的条目,提取对应用户名列表 incomplete_users = summed_entries[summed_entries < 40].index.tolist() # 打印结果 for user in incomplete_users: print(user)
内容的提问来源于stack exchange,提问作者Jan Van Bruaene
相关产品推荐
相关产品推荐

