2016-04-11 13 views
2

2つの列とインデックス(日付)を持つPANDASのデータフレームがあります。最初の一般的なNaN以外の要素の後に行を保持したいと思います。例えば、最初に私がしている:PANDASの最初のNaN以外の行を保持する

    A  B   
     Index 
     1/1/1950 NaN 5 
     2/1/1950 7  NaN 
     3/1/1950 9  NaN 
     4/1/1950 NaN 6 
     5/1/1950 4  15 
     6/1/1950 2  21 
     7/1/1950 NaN 5 
     7/1/1950 12  5 
     7/1/1950 5  NaN 

と私は1950年5月1日以降

    A  B   
     Index 
     5/1/1950 4  15 
     6/1/1950 2  21 
     7/1/1950 NaN 5 
     7/1/1950 12  5 
     7/1/1950 5  NaN 

を取得したいと思いが初めてであるAとBの両方がNaNではない、と私はしたいと思いますそれ以降のすべてのデータを保持する。お手伝いありがとう。

答えて

3

行のすべての値がTrueall(axis=1)を使用している場合は、DFとテストにnotnullを呼び出すことができ、我々はその後、locを用いて、第1 Trueインデックスラベルを取得し、DFをスライスするargmaxを呼び出すことができます。

In [37]: 
df.loc[df.notnull().all(axis=1).argmax():] 

Out[37]: 
      A  B 
Index    
5/1/1950 4.0 15.0 
6/1/1950 2.0 21.0 
7/1/1950 NaN 5.0 
7/1/1950 12.0 5.0 
7/1/1950 5.0 NaN 

ここでの内訳は次のとおりです。

In [38]: 
df.notnull() 

Out[38]: 
       A  B 
Index     
1/1/1950 False True 
2/1/1950 True False 
3/1/1950 True False 
4/1/1950 False True 
5/1/1950 True True 
6/1/1950 True True 
7/1/1950 False True 
7/1/1950 True True 
7/1/1950 True False 

In [39]: 
df.notnull().all(axis=1) 

Out[39]: 
Index 
1/1/1950 False 
2/1/1950 False 
3/1/1950 False 
4/1/1950 False 
5/1/1950  True 
6/1/1950  True 
7/1/1950 False 
7/1/1950  True 
7/1/1950 False 
dtype: bool 

In [40]: 
df.notnull().all(axis=1).argmax() 

Out[40]: 
'5/1/1950' 

EDIT

としては@DSMによって指摘、それが動作重複したインデックス値

+0

を処理するようdf.loc[df.notnull().all(axis=1).cummax()]を使用するより堅牢で、あなたに返事をありがとう! – km1234

+1

これは索引によっては失敗する可能性があります。 'df.loc [df.notnull()。all(axis = 1).cummax()]'のようなものはもっと頑強かもしれません。 – DSM

+0

@DSMこれが失敗するのはどのタイプのインデックスですか?浮動小数点型かソートされていない場合はどうですか? – EdChum

関連する問題