基于条件多次过滤数据帧的最快方法

时间:2019-03-07 16:39:06

标签: python pandas dataframe indexing

我有一个数据框,我需要根据条件多次(超过20万次)进行过滤,以考虑可能出现的独特结果。我很好奇是否有更快的方法来搜索和过滤特定条件。

我当前的实现低于

   Description Ticker     Start   Stop
0  A          B          220     100
1  Ab         TEST       180     103
2  Bac        RANDOM     205     32
3  Ba         BLAH       100     2
4  Ca         BLAH       92      40
5  Cd         B          85      25
6  A          B          221      71
7  A          B          400      171

def filter_df(object):
    stock_source = 'A'
    ticker = 'B'
    target = 120

    my_df = object.maindf[(object.maindf['Description'].values == stock_source) & (object.maindf['Ticker'].values == ticker]
    condition = (my_df['Start'].values <= target) & (my_df['Stop'].values >= target)

    my_df = my_df[condition]
    return my_df

对于上面的示例,我应该只获得索引0和6的行,并在上面执行其他操作

 ncalls  tottime  percall  cumtime  percall filename:lineno(function)
31192    1.950    0.000   37.554    0.001 test.py:95(filter_df)

谢谢您的帮助

1 个答案:

答案 0 :(得分:1)

您可以使用类似的内容:

stock_source = 'A'
ticker = 'B'
target = 120
m=df.Description.eq(stock_source) & df.Ticker.eq(ticker) \
            & ((df.Start.ge(target))&(df.Stop.le(target)))
df[m]

  Description Ticker  Start  Stop
0           A      B    220   100
6           A      B    221    71

P.S:您可以为每个条件创建单独的布尔型掩码。 :)