假设我有一个这样的DataFrame:

       Num1   Num2 
1       1      0
2       3      2
3       5      4
4       7      6
5       9      8

我有一本这样的词典:

d = {
    
    "Num1": 2,
    "Num2": 5
}

我想从每个列的DataFrame中返回与键匹配的值以及大于或等于键中的值.

我的结果应该如下所示:

       Num1   Num2 
1       nan    nan
2       3      nan
3       5      nan
4       7      6
5       9      8

我该怎么做呢?

推荐答案

与@db的答案相同,使用df.where而不是df.mask来保持逻辑,即使用ge而不是lt:

>>> df.where(df >= d)  # or df.where(df.ge(d))
   Num1  Num2
0   NaN   NaN
1   3.0   NaN
2   5.0   NaN
3   7.0   6.0
4   9.0   8.0

Edit

更进一步,如果要使用不同的运算符,可以按如下方式更改输入:

filters = [  # col, op, val
    ('Num1', '>=', 2),
    ('Num2', '<', 5)
]

m = pd.concat([df.eval(f'{col} {op} {val}').rename(col)
               for col, op, val in filters], axis=1)
out = df.where(m)
print(out)

# Output
   Num1  Num2
0   NaN   0.0
1   3.0   2.0
2   5.0   4.0
3   7.0   NaN
4   9.0   NaN

替代方案:

filters = {
    'Num1': '>= 2',
    'Num2': '< 5'
}

m = pd.concat([df.eval(f'{col} {cond}').rename(col)
               for col, cond in filters.items()], axis=1)
out = df.where(m)

Python相关问答推荐

Pandas read_jsonfuture 警告:解析字符串时,to_datetime与单位的行为已被反对

创建带有二维码的Flask应用程序,可重定向到特定端点

Python panda拆分列保持连续多行

由于瓶颈,Python代码执行太慢-寻求性能优化

DuckDB将蜂巢分区插入拼花文件

Python中的函数中是否有充分的理由接受float而不接受int?

有什么方法可以避免使用许多if陈述

剧作家Python:expect(locator).to_be_visible()vs locator.wait_for()

使用FASTCGI在IIS上运行Django频道

如何在Python中将returns.context. DeliverresContext与Deliverc函数一起使用?

删除所有列值,但判断是否存在任何二元组

图像 pyramid .难以创建所需的合成图像

我对我应该做什么以及我如何做感到困惑'

在Python 3中,如何让客户端打开一个套接字到服务器,发送一行JSON编码的数据,读回一行JSON编码的数据,然后继续?

try 检索blob名称列表时出现错误填充错误""

在Python中计算连续天数

python panda ExcelWriter切换动态公式到数组公式

Polars Group by描述扩展

在二维NumPy数组中,如何 Select 内部数组的第一个和第二个元素?这可以通过索引来实现吗?

30个非DATETIME天内的累计金额