You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量计算DataFrame中各Cow分组下各列的缺失值占比?

优化DataFrame分组计算缺失值占比的方案

需求背景

现有含100余列的DataFrame,需按Cow列分组,计算每组内其余所有列的缺失值占比。原方法需逐列计算后合并,重复工作量极大,需精简实现。

示例数据

生成代码

import pandas as pd
import numpy as np

mast_model_data = [[1152, '1', '10', '23'], [1154, '1', '4', '43'],
       [1155, 'NA', '3', '76'], [1152, '1', '10', 'NA'],
       [1155, '2', '10', '65'], [1152, '1', '4', 'NA']]
    
df = pd.DataFrame(mast_model_data, columns =['Cow', 'Lact', 'Procedure', 'Height'])

df.loc[:,'Lact'] = df['Lact'].replace('NA', np.nan)
df.loc[:,'Procedure'] = df['Procedure'].replace('NA', np.nan)
df.loc[:,'Height'] = df['Height'].replace('NA', np.nan)

生成的DataFrame

Cow  Lact Procedure Height
0   1152    1   10      23
1   1154    1   4       43
2   1155    NaN 3       76
3   1152    1   10      NaN
4   1155    2   10      65
5   1152    1   4       NaN

原冗余实现(仅作对比)

df1 = (df.groupby('Cow')['Lact']
         .apply(lambda x: np.mean(x.isna().to_numpy(), axis=None))
         .reset_index(name='Lact'))

df2 = (df.groupby('Cow')['Procedure']
         .apply(lambda x: np.mean(x.isna().to_numpy(), axis=None))
         .reset_index(name='Procedure'))

df3 = (df.groupby('Cow')['Height']
         .apply(lambda x: np.mean(x.isna().to_numpy(), axis=None))
         .reset_index(name='Height'))

missing = df1.merge(df2, on=['Cow'], how="left")
missing = missing.merge(df3, on=['Cow'], how="left")

原代码输出

Cow   Lact  Procedure   Height
0   1152    0.0 0.0 0.666667
1   1154    0.0 0.0 0.000000
2   1155    0.5 0.0 0.000000

优化后精简实现

方案一(最简洁)

直接对分组后的子DataFrame批量计算所有列的缺失值占比:

missing = df.groupby('Cow').apply(lambda x: x.isna().mean()).reset_index()

方案二(更高效)

使用agg方法指定聚合逻辑,避免apply的额外开销,适合超大数据集:

missing = df.groupby('Cow').agg(lambda col: col.isna().mean()).reset_index()

优化后输出

两种方案均生成与原代码完全一致的结果:

Cow   Lact  Procedure   Height
0   1152    0.0 0.0 0.666667
1   1154    0.0 0.0 0.000000
2   1155    0.5 0.0 0.000000

方案说明

  • 无需逐列编写重复代码,自动处理所有非分组列,适配任意列数的场景
  • isna()将空值转为布尔值,mean()直接计算布尔值的均值(即缺失值占比)
  • 方案二的agg方法性能优于apply,处理百万级以上数据时优势更明显

内容的提问来源于stack exchange,提问作者JohnH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 04:25:32