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

如何筛选pandas多级索引中指定主列非空的行

筛选多级列DataFrame中指定主列下至少一个子列非空的行

需求说明

使用pandas的compare函数对比两年数据集后生成多级列DataFrame,当主列(如company A)下的子索引列(2021、2023)值相等时,两列均显示NaN。需要筛选出指定主列下子索引列至少一个值非空的行(两列均为NaN的行不保留)。

示例数据

import pandas as pd
import numpy as np

cols = pd.MultiIndex.from_tuples([('company A', '2021'), ('company A', '2023'), ('company B', '2021'), ('company B', '2023')])
df = pd.DataFrame([[np.nan,np.nan,np.nan,np.nan], [3,4,np.nan,np.nan], [np.nan,np.nan,np.nan,6]], columns=cols)

解决方案代码

以指定主列为company A为例:

# 定义目标主列
target_company = 'company A'

# 生成筛选掩码:判断每行在目标主列下是否至少有一个非空值
mask = df[target_company].notna().any(axis=1)

# 筛选符合条件的行
result = df[mask]

代码解释

  • df[target_company]:提取目标主列对应的所有子列数据(此处为2021、2023两列)
  • notna():将非空值转换为True,NaN转换为False
  • any(axis=1):按行判断,只要该行有一个True(即至少一个非空值)就返回True
  • 最后用掩码mask筛选原DataFrame,仅保留符合条件的行

结果展示

执行后result的输出为:

company A      company B     
       2021 2023      2021 2023
1       3.0  4.0       NaN  NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:36:02