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

如何判断Dataframe分组列的两子列是否全为null并删除对应整组列

按规则批量删除Dataframe分组列实现方案

现有初始Dataframe结构

col_a1, col_a2, col_a3, col_b1, col_b2, col_b3, col_c1, col_c2, col_c3 
878       def    ert     123     nan     nan     001     ert    yui
999       erf    qaz     345     nan     nan     765     jkl    dfg

处理规则

若col_a2和col_a3全为null或空值,则删除col_a1、col_a2、col_a3整组列
若col_b2和col_b3全为null或空值,则删除col_b1、col_b2、col_b3整组列
若col_c2和col_c3全为null或空值,则删除col_c1、col_c2、col_c3整组列

预期输出结果

col_a1, col_a2, col_a3, col_c1, col_c2, col_c3 
878       def    ert     001     ert    yui
999       erf    qaz     765     jkl    dfg

实现代码(Python + Pandas)

第一步:导入依赖构造测试数据

import pandas as pd
import numpy as np

# 构造测试Dataframe
df = pd.DataFrame([
    [878, 'def', 'ert', 123, np.nan, np.nan, '001', 'ert', 'yui'],
    [999, 'erf', 'qaz', 345, np.nan, np.nan, '765', 'jkl', 'dfg']
], columns=['col_a1', 'col_a2', 'col_a3', 'col_b1', 'col_b2', 'col_b3', 'col_c1', 'col_c2', 'col_c3'])

第二步:执行核心处理逻辑

# 定义所有列分组的前缀标识
groups = ['a', 'b', 'c']
keep_cols = []

for group in groups:
    # 提取当前分组的三个列名
    col1 = f'col_{group}1'
    col2 = f'col_{group}2'
    col3 = f'col_{group}3'
    # 分别判断col2、col3是否全为空/NaN
    col2_all_empty = (df[col2].isna()) | (df[col2] == '')
    col3_all_empty = (df[col3].isna()) | (df[col3] == '')
    # 只要不是两个列全为空,就保留整组列
    if not (col2_all_empty.all() and col3_all_empty.all()):
        keep_cols.extend([col1, col2, col3])

# 生成最终结果
result_df = df[keep_cols]

补充说明

代码支持扩展到更多同规则的分组场景,同时兼容NaN和空字符串两种空值判断逻辑,最终输出的result_df即为符合要求的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:18:02