2013-03-04 25 views
2

我有一個Python列表/ EXCEL,看起來測距每一組連續值的長度一樣使用python或excel

[0,0,0,0,1,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,1,1,0,0,0] . 

我想下面的輸出:

length of 1st set of zeros - 4 

length of 2nd set of zeros - 2 

length of 3rd set of zeros - 1 

length of 4th set of zeros - 7 

length of 5th set of zeros - 3 

我已經在Excel中嘗試了" COUNTIF($D2:D$2,D2)"這個公式幫助我找到第n個值,但是我不確定如何找到每組連續值的長度。

上述問題如何在Excel和Python中實現?

回答

3

你應該使用itertools.groupby

counter = 1 
suffixes = {1: 'st', 2:'nd', 3:'rd'} 
for key, group in itertools.groupby(the_sequence): 
    if key == 0: 
     print 'The length of {}{} sequence of zeros is: {}'.format(counter, 
                    suffixes.get(counter, 'th'), 
                    len(tuple(group))) 
     counter += 1 

輸出:

The length of 1st sequence of zeros is: 4 
The length of 2nd sequence of zeros is: 2 
The length of 3rd sequence of zeros is: 1 
The length of 4th sequence of zeros is: 7 
The length of 5th sequence of zeros is: 3 

可惜我不是一個Excel的用戶,我不能幫你的Excel的解決方案。

+0

謝謝你這麼多列。這很好。 – richie 2013-03-04 13:00:37

3

在Excel中,假設你有D2:D20您可以在F2使用「數組公式」

=IFERROR(INDEX(FREQUENCY(IF($D$2:$D$20=0,ROW($D$2:$D$20)),IF(OFFSET($D$2:$D$20,1,0)<>0,IF($D$2:$D$20=0,ROW($D$2:$D$20)))),ROWS(F$2:F2)),"")

證實CTRL + SHIFT + ENTER並複製下來的數據 - 這會給你的列表所有的零序長 - 當數字用盡你的空白

如果數據是在一排,而不是你需要修改略有.....

+0

偉大的工作巴里。像魅力一樣工作......一旦我擁有了名譽先生,我就會讚美你! – richie 2013-03-04 13:27:32

+0

@richie你現在還需要1個upvote)不要擔心 - 我會鼓勵巴里的回答 - 這總是值得收藏的傑作) – 2013-03-04 17:07:34