2016-12-17 21 views
1

私はpandas.read_fwfを使って得られたメモリデータテーブルを持っています。データは昇順に並べ替えられています(私は検索したいVirtualカラムを参照しています)それは私が彼らがソートされているという事実を考慮すると、このようなデータを検索するために最も効率的な方法についてお聞きしたいと思います30万行pandas.read_fwfで得られたソートされたデータを検索する

Data sample

で小さくない、私は2つの値の間のフレームを探しに興味を持っています、私は基本的に列(行)の値を検索していることに注意してください。

bisectとpandas.Seriesを調べました。 searchsorted しかし、私はそれらを使用するためにいくつかのデータ転置を適用する必要があり、おそらくもっと簡単な方法が存在すると思っていたので、私は尋ねています。

ありがとうございました

+1

あなたが恩恵を受けるのデータを複数回検索する必要がある場合:それ以外の場合は、ここで

df = df[(df[col] > val1) & (df[col] < val2)] 

はあなたのような解決策は、(昇順で列colによってソートされ、あなたのDFを想定)を探していますです何らかのインデックスがあれば、ソートされたコンテナライブラリを見ることもできますし、バイナリ検索が役に立つかもしれません。 – kezzos

+0

@kezzosがすでに言っているように、 "検索"カラムをインデックスとして使用します: 'df.set_index( 'Virtual' df = pd.read_fwf(...、index_col = 'Virtual') ' – MaxU

答えて

0

マスクを試しましたか?並べ替えを考慮に入れていないにもかかわらず、パフォーマンスが十分に速くなるように感じます。

vals = df[col].iteritems() 
val1 = # lower value 
val2 = # upper value 

for i in range(len(df)): 
    val = next(vals)[1] 
    if val > val1: 
     i1 = i 
     break 

for i in range(i, len(df)): 
    val = next(vals)[1] 
    if val < val1: 
     i2 = i 
     break 

df = df.iloc[i1:i2] 
+0

もしあなたが必要ならばoこれを何度もやって、これらのメソッドのパフォーマンスは良くないでしょう – kezzos

関連する問題