同尺寸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与期望输出完全一致:
| Case | Path1 | Path2 | Path3 |
|---|---|---|---|
| 1 | 123 | NaN | NaN |
| 2 | NaN | NaN | NaN |
| 3 | NaN | 987 | NaN |
| 4 | NaN | NaN | 666 |
| 5 | NaN | NaN | NaN |
代码解释
df2.notna():生成一个与原DataFrame尺寸相同的布尔掩码,True表示对应位置非NaN,False表示NaN。df1.where(掩码):保留df1中掩码为True的位置的值,将掩码为False的位置替换为NaN,完美匹配需求。
内容的提问来源于stack exchange,提问作者user14085914
相关产品推荐
相关产品推荐

