如何从Series或列表中提取指定值以统计员工缺勤次数
解决方案
status.loc['A']触发KeyError是因为对应员工当月无缺勤记录,value_counts()返回的Series中不存在'A'索引,自然无法通过索引直接取值。
从absent列表提取'A'计数的方法
根据你存储absent列表的不同结构,对应方案如下:
- 若absent列表存储的是(状态值, 计数)的元组对:
直接遍历匹配即可,无匹配时默认返回0即可:
简化写法:absent_count = 0 for state, cnt in absent: if state == 'A': absent_count = cnt breakabsent_count = next((cnt for state, cnt in absent if state == 'A'), 0) - 若absent列表仅存储了
value_counts()的数值结果,未附带状态标签:
你需要补充存储状态索引的映射关系才能精准提取,否则纯数值列表无法对应到状态:# 存储环节补充保存状态顺序 state_index = status.value_counts().index.tolist() absent = status.value_counts().tolist() # 提取环节 absent_count = absent[state_index.index('A')] if 'A' in state_index else 0
更简单的替代方案(不需要依赖absent列表)
其实不用单独处理absent列表,直接调用value_counts()的get方法即可完全规避KeyError,代码更简洁:
# 存在'A'返回对应计数,不存在返回0 absent_count = status.value_counts().get('A', 0)
性能优化建议
600余员工的数据量不大,但逐行循环的写法可以替换为pandas分组聚合,效率更高、逻辑更清晰:
# 假设原始表为df,包含员工ID列、考勤状态列status absent_stats = df.groupby('员工ID')['status'].apply( lambda x: x.value_counts().get('A', 0) ).reset_index(name='缺勤次数') # 直接写入新Excel工作表 absent_stats.to_excel('缺勤统计结果.xlsx', sheet_name='月度缺勤', index=False)
内容的提问来源于stack exchange,提问作者xBatmanx
相关产品推荐
相关产品推荐

