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

多级索引Pandas DataFrame的数据校验与0值转nan实现方法

多级索引DataFrame校验与值替换实现

1. 前置依赖与示例数据构造

首先导入依赖库,构造和你结构一致的测试DataFrame:

import pandas as pd
import numpy as np

# 构造多级索引
index = pd.MultiIndex.from_product(
    [["Num_X", "Num_Y"], ["T1", "T2"]],
    names=["level1", "level2"]
)
# 构造测试数据
data = [[0,1,5],[4,0,2],[0,2,6],[4,0,4]]
df = pd.DataFrame(data, index=index, columns=["A","B","C"])

2. 数据校验逻辑实现

校验规则核心:相同二级索引+相同列的所有单元格,要么全为0,要么没有0。实现思路是按二级索引分组,统计每个列的极值判断是否符合规则:

# 按二级索引分组,统计每个列的最小值、最大值
grouped_stat = df.groupby(level=1).agg(["min", "max"])
# 找出不符合规则的组合:存在0(min=0)但不全为0(max≠0)
invalid_mask = (grouped_stat.xs("min", axis=1, level=1) == 0) & (grouped_stat.xs("max", axis=1, level=1) != 0)

# 校验结果判断
if invalid_mask.any().any():
    print("校验不通过,不符合规则的二级索引+列组合如下:")
    print(invalid_mask[invalid_mask.any(axis=1)])
else:
    print("校验通过")

3. 合规0值替换为NaN实现

校验通过后,所有0值都属于「同二级索引同列全为0」的合规情况,直接批量替换即可:

# 标记所有值为0的单元格
zero_mask = df == 0
# 按二级索引分组,判断同组同列是否全为0
valid_zero_mask = zero_mask.groupby(level=1).transform("all")
# 替换合规0值为NaN
df_result = df.where(~valid_zero_mask, np.nan)
print(df_result)

运行上述代码后即可得到你需要的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:36:05