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

Pandas基于groupby分组条件删除DataFrame对应行的实现方法

方案1:使用transform构造布尔索引(效率更高,适合大数据量)

核心逻辑是先给每一行标记对应cell分组的大小,再根据规则筛选行:

import pandas as pd

# 计算每个cell分组的大小,生成和原df行数一致的序列
group_size = df.groupby('cell')['cell'].transform('count')

# 构造筛选规则:分组大小为1全部保留;分组大小>1时仅保留value不为"NA"的行
filter_mask = (group_size == 1) | ((group_size > 1) & (df['value'] != "NA"))

# 执行筛选得到结果
result_df = df[filter_mask]

方案2:使用groupby + apply(逻辑直观,易自定义)

直接对每个分组单独处理,符合需求的返回,不符合的删除对应行:

def process_group(group):
    # 分组行数大于1时过滤掉NA行
    if len(group) > 1:
        return group[group['value'] != "NA"]
    # 分组行数为1时直接返回全部行
    return group

# group_keys=False避免生成额外的分组索引层级
result_df = df.groupby('cell', group_keys=False).apply(process_group)

注意事项

如果你的cell列存在空值,且需要保留空值对应的分组,可在groupby时添加dropna=False参数,即df.groupby('cell', dropna=False)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:06:03