2016-10-19 5 views
4

最新のインデックスを、現在のインデックスに対して 'NaN'以外の値で検索しようとしています。だから、私はこのような「NaNの」値のデータフレームを持っていると言う:Pandas DataFrameの列に有限値を持つ最新のインデックスを効率的に選択できますか?

 A  B  C 
0 2.1  5.3  4.7 
1 5.1  4.6  NaN 
2 5.0  NaN  NaN 
3 7.4  NaN  NaN 
4 3.5  NaN  NaN 
5 5.2  1.0  NaN 
6 5.0  6.9  5.4 
7 7.4  NaN  NaN 
8 3.5  NaN  5.8 

私はインデックス4で、現在午前た場合、私は値が設定されています

 A  B  C 
4 3.5  NaN  NaN 

私は最後の既知の値を知りたいですインデックス1であるインデックス4に「B」相対的、の:

01:

 A  B  C 
1 5.1 -> 4.6 NaN 

私のようなものを使用して値IがNaNとすべてのインデックスのリストを取得することができます知っています

indexes = df.index[df['B'].apply(np.isnan)] 

しかし、これは大きなデータベースでは効率が悪いようです。 tail現在のインデックスを基準にした最後の1つだけですか?

+0

あなたの予想出力は何ですか? – Psidom

+0

理想的には、値「4.6」とインデックス「1」を持っていたいと思います。 – alphaleonis

+0

インデックス4の最新のインデックスを知りたいのですか、それともすべてのインデックスを知りたいのですか? – Psidom

答えて

5

あなたは、このような何かを試すことがindexは列Bと同じNaN値を持つ系列に変換し、それ以降のすべてのNaNのための最後の非欠落しているインデックス前方に運び、そこffill()を使用します。

import pandas as pd 
import numpy as np 
df['Last_index_notnull'] = df.index.to_series().where(df.B.notnull(), np.nan).ffill() 
df['Last_value_notnull'] = df.B.ffill() 
df 

enter image description here

は今すぐインデックス4で、あなたが知っている最後の非欠損値は4.6で、インデックスが1です。

4

インデックスあなたがTHIを使用することができます4

df.B.ix[:4].last_valid_index() 

1 

のように列Bため

last_valid_index
first_valid_index
を知るためにいくつかの便利なメソッドこのようにすべての列のための

pd.concat([df.ix[:i].apply(pd.Series.last_valid_index) for i in df.index], 
      axis=1).T 

enter image description here

関連する問題