在Pandas数据帧中保留大小为1的块> = k

时间:2017-05-12 17:27:26

标签: python pandas

我需要保留块> = k为'1'。所有其他“1”块应转换为零。例如, k = 2

df= 
    a  b
0   1  1
1   1  1
2   0  0
3   1  0
4   0  0
5   1  0
6   0  0
7   1  0
8   0  0
9   1  1
10  1  1
11  1  1
12  0  0
13  0  0
14  1  0
15  0  0
16  1  1
17  1  1
18  0  0
19  1  0

其中列a是原始序列,列b是所需的。

1 个答案:

答案 0 :(得分:4)

z = df.a.eq(0)
g = z.cumsum().mask(z, -1)

k = 2
df['b'] = df.a.groupby(g).transform('size').ge(k).mask(z, 0)

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