2017-03-02 91 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值,開始和結束index並計算兩者之間的距離差異。最後,我想獲得更大的範圍。

可以做到這一點嗎?

+0

也許'dropna'併爲您在'ž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