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

同尺寸DataFrame数据筛选:保留df2非NaN对应df1的值

解决方案

要实现仅保留df1中与df2非NaN位置对应的值,其余替换为NaN,用Pandas的where()方法结合notna()生成的布尔掩码即可完成,步骤如下:

1. 构造示例数据

先还原题目中的两个DataFrame:

import pandas as pd
import numpy as np

df1 = pd.DataFrame({
    'Case': [1, 2, 3, 4, 5],
    'Path1': [123, 456, 789, 1011, 1112],
    'Path2': [321, 654, 987, 1101, 2105],
    'Path3': [333, 444, 555, 666, 777]
})

df2 = pd.DataFrame({
    'Case': [1, 2, 3, 4, 5],
    'Path1': ['a', np.nan, np.nan, np.nan, np.nan],
    'Path2': [np.nan, np.nan, 'a', np.nan, np.nan],
    'Path3': [np.nan, np.nan, np.nan, 'a', np.nan]
})

2. 核心处理代码

一行代码即可完成需求:

result = df1.where(df2.notna())

3. 输出结果

执行后得到的result与期望输出完全一致:

CasePath1Path2Path3
1123NaNNaN
2NaNNaNNaN
3NaN987NaN
4NaNNaN666
5NaNNaNNaN

代码解释

  • df2.notna():生成一个与原DataFrame尺寸相同的布尔掩码,True表示对应位置非NaN,False表示NaN。
  • df1.where(掩码):保留df1中掩码为True的位置的值,将掩码为False的位置替换为NaN,完美匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:33:17