2017-05-17 60 views
0

序列讓我們值0的熊貓數據幀或1,如:優雅的方式來遍歷並計算大熊貓

import pandas as pd 
a = pd.DataFrame([1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 
        1, 1, 1, 1, 1, 0, 0, 1, 1], columns=['instance']) 

我計數1個值的出現與計數的復位作爲0出現。例如:

count, b = 0, [] 
for i in a.instance: 
    if i == 0: 
     count = 0 
     b.append(count) 
    else: 
     count+=1 
     b.append(count) 

這給了我:

b = pd.DataFrame(b, columns=['count_check']) 
c = pd.concat((a, b), axis=1) 

結果:

instance count_check 
0   1   1 
1   1   2 
2   1   3 
3   0   0 
4   0   0 
5   0   0 
6   1   1 
7   1   2 
8   1   3 
9   1   4 
10   0   0 
11   1   1 
12   1   2 
13   1   3 
14   1   4 
15   1   5 
16   0   0 
17   0   0 
18   1   1 
19   1   2 

它工作正常,但對於更大的數據集有點慢,當重複它。會有更快更優雅的方式來做同樣的事嗎?
由於

回答

1
a['count_check'] = a.apply(lambda x: x.groupby((~x.astype(bool)).cumsum()).cumsum()) 

輸出:

instance count_check 
0   1   1 
1   1   2 
2   1   3 
3   0   0 
4   0   0 
5   0   0 
6   1   1 
7   1   2 
8   1   3 
9   1   4 
10   0   0 
11   1   1 
12   1   2 
13   1   3 
14   1   4 
15   1   5 
16   0   0 
17   0   0 
18   1   1 
19   1   2