如何判断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
相关产品推荐
相关产品推荐

