2017-03-02 7 views
1

私は、今後の研究のために、開始日と終了日までにヌル行のより大きなシーケンスを取得する必要があるDataFrameを持っています。私のインデックスはDatatimeIndexオブジェクトで、データフレームは、次のようになります。パンダのデータフレームで最大連続ヌル行を取得

      C Instalation N Serial Number D Register Read \ 
Z Ts Read                  
2016-12-25 00:00:00 PT0002000080299561BD 10101516046456    A+ 
2016-12-25 00:15:00 PT0002000080299561BD 10101516046456    A+ 
2016-12-25 00:30:00 PT0002000080299561BD 10101516046456    A+ 
2016-12-25 00:45:00 PT0002000080299561BD 10101516046456    A+ 
2016-12-25 01:00:00 PT0002000080299561BD 10101516046456    A+ 

        M Read D Read Unit 
Z Ts Read        
2016-12-25 00:00:00 0,002   kWh 
2016-12-25 00:15:00 0,002   kWh 
2016-12-25 00:30:00 0,002   kWh 
2016-12-25 00:45:00 0,002   kWh 
2016-12-25 01:00:00 0,002   kWh 

NaN値がデータフレーム、問題なしに散在することができます。しかし、彼らが連続していれば私は気にします。そして、その場合、少なくとも1つのNaN値を持つ各行について、開始と終了の両方を知りたい場合は、indexと2つの範囲の差を計算します。最終的に私はより大きな範囲を取得したい。

これは可能ですか?

+0

多分 'dropna'をと' Z TsのRead'のギャップをチェック! –

+0

NaN値を削除するタイムスタンプのシーケンスに混乱を招いていますが、デルタタイムを取得するのに苦労しています:/ –

+0

出力の表示例を教えてください。私は、開始日と終了日によってヌル行が大きくなることを意味するものを頭に浮かべることはできません。 – pansen

答えて

0

はわからない私は、Qを100%理解しますが、多分これはあなたが望むものである:

df = pd.DataFrame({"a": [1, 2, 3, np.nan, np.nan, np.nan, 7, 8], "b": [1, 2, 3, np.nan, 5, 6, 7, 8]} 

print df 

    a b 
0 1.0 1.0 
1 2.0 2.0 
2 3.0 3.0 
3 NaN NaN 
4 NaN 5.0 
5 NaN 6.0 
6 7.0 7.0 
7 8.0 8.0 

counts = df.isnull() 
counts[~counts] = np.nan 
print counts 

    a b 
0 NaN NaN 
1 NaN NaN 
2 NaN NaN 
3 1.0 1.0 
4 1.0 NaN 
5 1.0 NaN 
6 NaN NaN 
7 NaN NaN 

runs = counts.cumsum() 
print runs 

    a b 
0 NaN NaN 
1 NaN NaN 
2 NaN NaN 
3 1.0 1.0 
4 2.0 NaN 
5 3.0 NaN 
6 NaN NaN 
7 NaN NaN 

runs.max(axis=0) 

a 3.0 
b 1.0 
dtype: float64 
関連する問題