【发布时间】:2018-03-21 02:06:48
【问题描述】:
我在 Pandas 中工作,我想将多个过滤器应用于跨多个字段的数据框。
我正在使用另一个更复杂的数据框,但我正在简化这个问题的上下文。以下是示例数据框的设置:
dates = pd.date_range('20170101', periods=16)
rand_df = pd.DataFrame(np.random.randn(16,4), index=dates, columns=list('ABCD'))
对此数据框应用一个过滤器有据可查且简单:
rand_df.loc[lambda df: df['A'] < 0]
因为 lambda 看起来像一个简单的布尔表达式。执行以下操作很诱人。这不起作用,因为它不是布尔表达式,而是可调用的。其中多个不能像布尔表达式那样组合:
rand_df.loc[lambda df: df['A'] < 0 and df[‘B’] < 0]
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-31-dfa05ab293f9> in <module>()
----> 1 rand_df.loc[lambda df: df['A'] < 0 and df['B'] < 0]
我找到了两种成功实现这一点的方法。我会将它们添加到潜在答案中,因此您可以直接评论它们作为解决方案。但是,我想征求其他方法,因为我不确定这两种方法是否是过滤 Pandas 数据帧的非常标准的方法。
【问题讨论】:
-
UN-DUPLICATE:被标记为重复的问题确实回答了我的问题。然而,它没有这个干净。该问题有一些多余的上下文,例如数据是从 CSV 读取的。这是一个干净的示例,您可以将代码直接粘贴到您自己的 REPL 中,提出答案并发布。在很短的时间内,这个问题的答案比重复的提名人还要多。因此,我认为重新开放是有意义的。
-
问题完全相同,重复的答案是由 pandas 的创建者编写的,所以我认为这是过滤数据框的最佳方法。
-
谢谢。谦虚地指出,我应该考虑特别重视 Wes McKinney 回答的 Pandas 问题。