如何筛选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转换为Falseany(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
相关产品推荐
相关产品推荐

