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

如何删除Pandas中存在全NaN列的分组的所有行?

解决方案:删除存在全NaN列的分组

步骤说明

要实现「删除分组内存在任意一列全为NaN的所有行」,可以用Pandas按以下步骤操作:

  • 按分组键(比如示例中的ID)分组,检查每个分组的每一列是否全部为NaN;
  • 筛选出存在至少一列全NaN的分组ID;
  • 从原数据中排除这些分组的所有行。

代码实现

先构造示例数据:

import pandas as pd
import numpy as np

# 示例数据
data = {
    'ID': [1,1,2,2,3,3,4,4],
    'Column A': [1,2,3,4,np.nan,6,np.nan,np.nan],
    'Column B': [np.nan,np.nan,5,6,7,np.nan,8,9]
}
df = pd.DataFrame(data)

然后执行筛选:

# 1. 按ID分组,统计每列是否全为NaN
group_col_nan = df.groupby('ID').agg(lambda col: col.isna().all())

# 2. 找出存在至少一列全NaN的分组ID
bad_groups = group_col_nan[group_col_nan.any(axis=1)].index

# 3. 保留合格分组的行
filtered_df = df[~df['ID'].isin(bad_groups)]

简化写法

如果想更简洁,也可以把步骤合并成一行:

filtered_df = df[~df['ID'].isin(df.groupby('ID').agg(lambda col: col.isna().all()).any(axis=1).loc[lambda x: x].index)]

结果验证

处理后的filtered_df会保留ID=2(无NaN)和ID=3(无全NaN列)的所有行,删除ID=1(Column B全NaN)和ID=4(Column A全NaN)的所有行,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:23:21