2017-05-17 58 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