Python:基于另一DataFrame非空值将目标DataFrame对应位置设为NaN
基于DataFrame对应位置的NaN替换方案
原始数据
df1:
ticker A B C date 2022-01-01 NaN NaN 100 2022-01-02 NaN 200 NaN 2022-01-03 100 NaN NaN 2022-01-04 NaN NaN 120
df2:
ticker A B C date 2022-01-02 145 233 100 2022-01-03 231 200 241 2022-01-04 100 200 422 2022-01-05 424 324 222 2022-01-06 400 421 320
需求
将df2中所有与df1对应位置非空的单元格值设为np.nan,得到目标df3:
ticker A B C date 2022-01-02 145 NaN 100 2022-01-03 NaN 200 241 2022-01-04 100 200 NaN 2022-01-05 424 324 222 2022-01-06 400 421 320
Pythonic实现(无循环)
直接利用Pandas原生向量化方法即可完成,两种简洁写法任选:
方法1:使用where
import numpy as np import pandas as pd # 假设df1、df2已提前定义 df3 = df2.where(df1.isna(), np.nan)
逻辑:保留df2中满足df1.isna()(df1对应位置为空)的值,不满足条件的位置替换为np.nan。
方法2:使用mask
df3 = df2.mask(df1.notna())
逻辑:当df1.notna()(df1对应位置非空)的条件成立时,自动将df2对应位置替换为NaN(mask默认替换值为NaN,无需额外指定)。
两种方法均为Pandas优化后的向量化操作,完全避免循环,执行效率远高于逐行逐列遍历。
内容的提问来源于stack exchange,提问作者MathMan 99
相关产品推荐
相关产品推荐

