Pandas中count()统计结果为0时触发KeyError问题求助
解决按员工统计P出现次数的KeyError问题
你的问题出在get_group会直接查找指定的分组键,当某个员工没有P类型的记录时,这个分组不存在就会抛出KeyError。下面是几种更可靠的解决方案:
方法1:分组统计频次后转宽表(推荐)
通过groupby结合value_counts统计每个员工的各类记录数,再转成宽表并填充缺失值为0,直接提取P的统计结果:
import pandas as pd # 按员工分组,统计Cycle类型的频次,转宽表后提取P列,缺省补0 p_count = df.groupby('Matricule')['Le Type Cycle'].value_counts().unstack(fill_value=0)['P']
方法2:用交叉表直接生成统计结果
pd.crosstab可以直接生成员工和Cycle类型的交叉统计矩阵,提取P列即可:
p_count = pd.crosstab(df['Matricule'], df['Le Type Cycle'])['P']
方法3:标记P类型后求和
先把Le Type Cycle为P的行标记为1,其他为0,再按员工分组求和,结果就是每个员工的P出现次数:
# 生成标记列 df['is_production'] = (df['Le Type Cycle'] == 'P').astype(int) # 按员工求和 p_count = df.groupby('Matricule')['is_production'].sum()
兼容原有思路的修改(避免KeyError)
如果一定要保留原有的分组方式,可以通过字典的get方法处理不存在的分组:
grouped = df.groupby(['Matricule', 'Le Type Cycle'])['Le Type Cycle'] # 查找目标分组,不存在则返回空列表,长度为0 target_group = grouped.groups.get((index, 'P'), []) count = len(target_group)
内容的提问来源于stack exchange,提问作者Amira Knani
相关产品推荐
相关产品推荐

