pandas中基于lambda条件统计机器日活动量的报错修复
错误原因
你之前的代码报错核心问题是:groupby(['day','machine'])后你仅选择了['machine']列传入transform逻辑,此时lambda接收的参数x是仅包含machine字段的Series,自然无法索引到qty列,因此抛出KeyError。
修复后的实现代码
推荐使用可读性更高的分步写法:
# 按天、机器分组,统计每组内qty非空的有效记录总数 my_df['activities'] = my_df.groupby(['day', 'machine'])['qty'].transform(lambda x: x.notna().sum()) # 将qty为空的故障记录对应的活动量置为NaN my_df.loc[my_df['qty'].isna(), 'activities'] = np.nan
如果希望把逻辑合并到单个transform中,也可以使用如下写法:
my_df['activities'] = my_df.groupby(['day', 'machine'])[['qty']].transform( lambda group: [group['qty'].notna().sum() if not pd.isna(val) else np.nan for val in group['qty']] )
结果说明
上述代码运行后得到的activities列完全匹配预期输出:
- 第1天机器A有效记录共4条,对应行的activities均为4
- 第1天机器B有效记录共2条,对应行的activities均为2
- 第2天机器B有效记录共2条,对应行的activities均为2
- 第2天机器A的故障记录对应activities为NaN
内容的提问来源于stack exchange,提问作者Alexis
相关产品推荐
相关产品推荐

