2016-11-02 5 views
0

カラム(Col1)の連続したパンダデータフレーム行で満たされる最小基準(0.6)をチェックしたいシナリオがあります。これは開始値が少なくとも(0.7)すなわち:すなわちパンダ複数の最小連続基準を確認する

Col1 
0.3 
0.5 
0.55 
0.8 = true 
0.65 = true 
0.9 = true 
0.61 = true 
0.3 
0.6 
0.67 
0.74 = true 
0.63 = true 
0.61 = true 

値が少なくとも0.7である場合、または値が少なくとも0.6であり、前の値は、第一と少なくとも0.6である場合に、チェックがTrueあろう連続系列の値は少なくとも0.7である。

これは非常に大きなデータセットから実行されるため、効率的である必要があります。私はshift()で何かがうまくいくと思っています...しかしそれはかなり正しいとは言えません。

答えて

3

Series.where()を使用して論理シリーズを構築できます。

ステップ

  • nan値でシリーズを初期化します。
  • それはの初めに可能な欠損値を埋める前の値
  • に依存するため、前方0.6
  • 未満のすべての値が0.6〜0.7の間の値を埋めるために0.7
  • より大きいすべての値がFalseの割り当てのために真の割り当て

    import pandas as pd 
    import numpy as np 
    df['check'] = np.nan 
    df['check'] = (df['check'].where(df.Col1 < 0.7, True) 
              .where(df.Col1 > 0.6, False) 
              .ffill().fillna(False) 
              .astype(bool)) 
    
    :シリーズ
  • はDTYPE(オプション)

そうブール値に変換します

enter image description here

+0

非常に賢い!ありがとうございました! – cwse

+0

「チェック」という新しい列を作成せずに、このチェックロジックをcol1の選択条件としてどのように使用できますか?私。 df.col1.loc(...はあなたのチェック基準に合っています...)。可能であれば、.loc()を使用したいと思います。 – cwse

+0

'df.Col1 [df.check]'を実行してサブセットを作成し、チェック列を削除します。何らかの理由で実際に新しい列を作成したくない場合は、 's = pd.Series([np.nan] * df.shape [0]、index = df.index); df.Col1.loc [s.where(df.Col1 <0.7、True).where(df.Col1> 0.6、False).ffill()。fillna(False).astype(bool)] ' – Psidom

関連する問題