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

Pandas按指定列分组后,删除组内存在非空col2时的空值行

Pandas分组筛选:保留组内非空col2记录或全空组

构造示例数据集

先还原你提供的数据集:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'col1': ['A', 'A', 'A', 'A', 'A', 'B', 'B'],
    'col2': [1, np.nan, np.nan, 1, np.nan, np.nan, np.nan],
    'col3': [5, 5, 5, 2, 2, 3, 4],
    'col4': ['x', 'y', 'z', 'z', 'z', 'z', 'z']
})

实现筛选逻辑

核心思路:按['col1','col3']分组后,标记每组是否存在非空的col2值,再筛选出两类行:

  • 组内存在非空col2时,只保留col2非空的行
  • 组内所有col2都为空时,保留整组所有行

代码实现:

# 给每行标记所在组是否存在非空col2
df['has_non_null_col2'] = df.groupby(['col1', 'col3'])['col2'].transform(lambda x: x.notna().any())

# 筛选符合条件的行,临时标记列可以删除
result_df = df[(df['col2'].notna()) | (~df['has_non_null_col2'])].drop(columns='has_non_null_col2')

# 可选:重置索引和示例结果对齐
result_df = result_df.reset_index(drop=True)

输出结果

执行后result_df内容如下:

col1  col2  col3 col4
0    A   1.0     5    x
1    A   1.0     2    z
2    B   NaN     3    z
3    B   NaN     4    z

完全匹配你期望的结果:A-5、A-2组删除了col2为空的行,B-3、B-4组因无col2非空记录,全部保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:19:53