如何基于分组检测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
相关产品推荐
相关产品推荐

