根据多个列条件过滤DataFrame

1 投票
2 回答
2502 浏览
提问于 2025-04-18 10:38

我想知道怎么用“与”来过滤一个数据框(dataframe)?换句话说,如果我有一个叫做 m 的数据框,它有 a、b、c、d、e 这些列,我想返回所有 b 列的值大于 120 并且 c 列的值等于 7.3 的行,该怎么做呢?

我试过这样做,但出现了错误:

print(m[m['b'] >120, m['c'] ==7.3])

2 个回答

0

在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够清晰,或者是我们对某个概念理解得不够透彻。比如,有人可能在使用某个函数时,发现它的表现和预期不一样。这种情况很常见,尤其是对于刚开始学习编程的小伙伴们。

当我们在写代码时,可能会用到一些特定的语法或者规则。如果不太了解这些规则,就容易出错。比如,有些编程语言对大小写非常敏感,也就是说“变量名”和“变量名”是两个不同的东西。如果你不小心写错了,就会导致程序无法正常运行。

另外,调试代码也是一个重要的环节。调试就是找出代码中的错误,并进行修正。这个过程可能会比较繁琐,但也是学习编程的一部分。通过不断地尝试和修正,我们可以逐渐提高自己的编程能力。

总之,编程是一项需要耐心和细心的工作。遇到问题时,不要气馁,多查资料,多请教别人,慢慢就能掌握这些知识了。

>>> mask = (m.b > 120) & (m.c == 7.3)
>>> m[mask]
2

为了更好地理解GoBrewers14的回答,你需要用括号把表达式包起来,这样才能解决Python中运算符的优先级问题。

比如,下面这条语句会出错:

In [3]: 1 > 0 & 'a' < 'b'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-5d58a7b0bade> in <module>()
----> 1 1 > 0 & 'a' < 'b'

TypeError: unsupported operand type(s) for &: 'int' and 'str'

这是因为Python首先会计算 0 & 'a'。所以你需要用括号把语句包起来,这样才能让它变得合理:

In [4]: (1 > 0) & ('a' < 'b')
Out[4]: True

简单来说,你需要的是:

m[(m['b'] > 120) & (m['c'] == 7.3)]

撰写回答