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

如何基于一个dataframe的条件将另一个dataframe对应值替换为nan

我们可以通过Pandas的mask方法快速实现需求,具体实现步骤如下:

前置约定

我们将存储化合物浓度的原始DataFrame命名为df_raw,存储非缺失值占比的DataFrame命名为df_ratio。

核心实现代码

import pandas as pd
import numpy as np

# 构造布尔掩码:占比<=0.5的位置标记为需要替换为NaN
mask = df_ratio.set_index('样本编号') <= 0.5

# 按样本和化合物对齐数据,替换符合条件的值
df_result = df_raw.set_index('样本编号')\
                  .mask(mask, other=np.nan)\
                  .reset_index()

逻辑说明

  1. 首先将占比表的索引设置为样本编号,和原始浓度表的样本维度对齐,判断每个样本下各化合物的占比是否<=0.5,得到布尔掩码表。
  2. 调用Pandas的mask方法时,会自动根据索引(样本编号)和列名(化合物名称)对齐两个表,将掩码为True的位置统一替换为np.nan,最后重置索引即可得到符合预期的结果。

测试用构造代码(可选)

如果需要验证结果,可以用以下代码构造和示例一致的测试数据:

# 构造示例原始浓度数据
df_raw = pd.DataFrame({
    '样本编号': ['A','A','A','A','B','B','B','B','C','C','C','C'],
    '乙醇': [20,30,20,np.nan,21,23,23,23,23,22,22,22],
    '丙酮': [20,23,23,20,46,74,67,np.nan,np.nan,np.nan,np.nan,np.nan],
    '甲醛': [20,20,np.nan,np.nan,87,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan],
    '甲烷': [20,np.nan,np.nan,np.nan,54,54,53,33,66,88,90,88]
})

# 构造示例占比数据
df_ratio = pd.DataFrame({
    '样本编号': ['A','B','C'],
    '乙醇': [0.75,1,1],
    '丙酮': [1,0.75,0],
    '甲醛': [0.5,0.25,0],
    '甲烷': [0.25,1,1]
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:45:04