2016-08-10 23 views
2

時系列(タプルの順番)では、基準が初めて満たされたときに最も効率的な方法は何ですか?レベルよりも大きな値を見つける - Python Pandas

特に、パンダのデータフレームの列の値が100を超えたときを判断する最も効率的な方法は何ですか?

私は巧妙なベクトル化された解を望んでおり、df.iterrows()を使用する必要はありませんでした。

たとえば、値が100を超えると、価格データまたはカウントデータ。 DF [ 'COL']> 100

   price 
date 
2005-01-01  98 
2005-01-02  99 
2005-01-03  100 
2005-01-04  99 
2005-01-05  98 
2005-01-06  100 
2005-01-07  100 
2005-01-08  98 

が、潜在的に非常に大規模なシリーズのため。 iterate(slow)する方が良いか、ベクトル化されたソリューションがありますか?

for row, ind in df.iterrows(): 
    if row['col'] > value_to_check: 
     breakpoint = row['value_to_record'].loc[ind] 
     return breakpoint 
return None 

しかし、私の質問は、効率性(潜在的に、うまくスケールしますベクトル化ソリューション)の詳細です:

df.iterrows()ソリューションである可能性があります。 "> 99"

df[df['price'].gt(99)].index[0] 

戻り"2"、第2のインデックス列:

+0

データの例は、この問題を解決するのに役立ちます。 –

+0

@ juanpa.arrivillaga私は質問を編集しました - 明確にする希望。 – Jared

答えて

3

はこれを試してみてください。これは、直列100の最初の発生のインデックス値を返す99

df[df['price'].gt(99)].index 
Int64Index([2, 5, 6], dtype='int64') 
+1

私はこれが質問の中核に答えるとは思っていません。反復子のようなベクトル化されたnumpy演算があるので、反復するのではなく、遅れて値を返すようにします戻す前に配列全体にわたって – maxymoo

0

より大きい

全ての行インデックス:NO値が正確に100、それが必要でない場合

index_value = (df['col'] - 100).apply(abs).idxmin() 

最も近い値のインデックスを返します。

関連する問題