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

如何基于分组检测DataFrame中整组全为空的列并删除?

按分组级全空列删除方案(替代整体空值占比判断)

核心逻辑

不再按整体列空值占比判断,改为检查:只要目标列在任意一个分组内所有行都是NaN,无论其他分组是否有有效值,都标记并删除该列。

实现步骤&代码示例

1. 构造示例数据

先模拟符合需求的测试数据,其中col3在Group B下全为NaN,整体空值占比仅50%:

import pandas as pd
import numpy as np

data = {
    'Group': ['A', 'A', 'B', 'B'],
    'col1': [1, 2, 3, 4],
    'col2': [np.nan, 5, 6, np.nan],
    'col3': [7, 8, np.nan, np.nan]
}
df = pd.DataFrame(data)

2. 分组统计非空值数量

按分组列(这里是Group)分组,统计每个分组内各列的非空行数:

# 分组后统计每列非空值数量,全NaN的列会显示0
grouped_non_null = df.groupby('Group').count()

3. 定位待删除列

找出至少在一个分组中全为NaN的列(即分组统计值为0的列):

# 检查每列是否存在任意分组统计值为0,返回布尔数组后筛选列名
cols_to_drop = grouped_non_null.columns[grouped_non_null.eq(0).any(axis=0)]

4. 删除目标列

从原DataFrame中移除这些列:

df_cleaned = df.drop(cols_to_drop, axis=1)

验证结果

执行后df_cleaned会自动移除col3,符合需求——即便它的整体空值占比未达85%,但因Group B下全空被标记删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:15:04