我有一个数据框,我需要根据条件多次(超过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)
谢谢您的帮助
答案 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:您可以为每个条件创建单独的布尔型掩码。 :)