如何通过字典过滤Pandas DataFrame,保留列中≥阈值的元素?
问题描述
假设有如下Pandas DataFrame:
Num1 Num2 1 1 0 2 3 2 3 5 4 4 7 6 5 9 8
同时有如下字典:
d = { "Num1": 2, "Num2": 5 }
需求是:对DataFrame中与字典键匹配的列,保留值大于等于字典对应阈值的元素,不符合条件的替换为nan,最终得到如下结果:
Num1 Num2 1 NaN NaN 2 3.0 NaN 3 5.0 NaN 4 7.0 6.0 5 9.0 8.0
解决方案
可以利用Pandas的ge()和where()方法快速实现需求,代码如下:
import pandas as pd # 构造原始数据 df = pd.DataFrame({ 'Num1': [1, 3, 5, 7, 9], 'Num2': [0, 2, 4, 6, 8] }, index=[1,2,3,4,5]) d = {"Num1": 2, "Num2": 5} # 核心逻辑 result = df.where(df.ge(d)) print(result)
代码说明
df.ge(d):按列匹配字典的键,将每列的元素与对应阈值做大于等于比较,生成一个布尔值DataFrame(满足条件为True,否则为False)。df.where(...):根据布尔掩码筛选数据,保留原DataFrame中True位置的值,False位置替换为nan。
运行代码后即可得到符合预期的结果。
内容的提问来源于stack exchange,提问作者Jason Strimpel
相关产品推荐
相关产品推荐

