2017-03-02 84 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