我正在使用多个条件(与变量进行比较)来选择/过滤DataFrame,如下所示:
results = df1[
(df1.Year == Year) &
(df1.headline == text) &
(df1.price > price1) &
(df1.price < price2) &
(df1.promo > promo1) &
(df1.promo < promo2)
]
虽然这种方法行得通,但速度非常慢。因此,我想知道,有没有更有效的方法使用熊猫基于多个条件来筛选/选择行?
答案 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