代码之家  ›  专栏  ›  技术社区  ›  AaronDT

PANDAS:使用多个条件从数据帧中选择行的有效方法

  •  0
  • AaronDT  · 技术社区  · 7 年前

    我正在使用多个条件(与变量比较)选择/筛选数据帧,如下所示:

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

    虽然这种方法有效,但速度非常慢。因此,我想知道,是否有更有效的方法根据多个条件使用panda筛选/选择行?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Brad Solomon    7 年前

    在我个人看来,你目前的方法在这本书中是相当公平的。

    如果您确实需要这样做,一种优化方法是使用底层numpy数组来生成布尔蒙版。一般来说,与numpy相比,pandas在如何重载操作符方面可能会有一些额外的开销。(可以说,权衡更大的灵活性和对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 ,熊猫可以做什么:

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