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

时间:2018-08-27 19:29:03

标签: python pandas dataframe

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

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

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

1 个答案:

答案 0 :(得分:2)

根据我个人的观点,您目前的方法在书上与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