如何编写适配Pandas多层列头DataFrame的通用行筛选函数
函数实现
直接用Pandas内置的按行聚合逻辑即可实现通用筛选,代码如下:
def select(f, top_level_name): # 提取指定顶层列对应的所有子列数据 target_sub_df = f[top_level_name] # 按行判断:只要任意子列转换为布尔后为真,该行就符合条件 mask = target_sub_df.astype(bool).any(axis=1) # 返回筛选后的完整DataFrame return f[mask]
使用验证
你可以直接用给出的示例数据测试:
# 测试筛选顶层A的行 print(select(f, "A")) # 输出结果和手动写的筛选逻辑完全一致: A B u v x y 0 1 1 0 1 1 1 0 0 0 3 1 0 1 0 # 测试筛选顶层B的行 print(select(f, "B")) # 输出结果同样匹配手动实现: A B u v x y 0 1 1 0 1 2 0 0 1 1 3 1 0 1 0
逻辑说明
- 不管指定顶层列下有多少个子列、子列名称是什么,
f[top_level_name]都可以一次性提取所有对应子列组成子DataFrame,无需硬编码子列名 any(axis=1)会自动对每一行的所有子列做逻辑或运算,替代手动拼接多个|条件,适配任意子列数量astype(bool)和原实现的逻辑保持一致,兼容非0/1的数值类型判断
内容的提问来源于stack exchange,提问作者W.P. McNeill
相关产品推荐
相关产品推荐

