繁体   English   中英

熊猫:使用多个条件从数据框中选择行的有效方法

[英]Pandas: Efficient way to select rows from a dataframe using multiple criteria

我正在使用多个条件(与变量进行比较)选择/过滤DataFrame,如下所示:

results = df1[
    (df1.Year == Year) &
    (df1.headline == text) &
    (df1.price > price1) &
    (df1.price < price2) &
    (df1.promo > promo1) &
    (df1.promo < promo2)
]

尽管此方法有效,但速度非常慢。 因此,我想知道,有没有更有效的方法使用熊猫基于多个条件来筛选/选择行?

在我个人看来,您当前的方法在书上与Pandas语法一样公平。

一种优化的方法(如果确实需要这样做)是使用基础的NumPy数组来生成布尔掩码。 一般而言,Pandas在使操作员和NumPy过载方面会带来一些额外的开销。 (折衷可以说是更大的灵活性和对NaN数据的内在平滑处理。)

price = df1.price.values
promo = df1.promo.values

# Note: this is a view to a slice of df1
results = df1.loc[
    (df1.Year.values == Year) &
    (df1.headline.values == text) &
    (price > price1) &
    (price < price2) &
    (promo > promo1) &
    (promo < promo2)
]

其次,检查您是否已经在使用numexpr ,启用了Pandas可以做到:

>>> import pandas as pd
>>> pd.get_option('compute.use_numexpr')  # use `pd.set_option()` if False
True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM