根据开关值确定pandas系列中的第一个块

kmbjn2e3  于 2023-05-15  发布在  其他
关注(0)|答案(1)|浏览(112)

考虑以下pandas系列:

import pandas as pd
s = pd.Series([0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1])

我想确定第一个值为1的块。当0第一次切换到1时,块开始,当它切换回来时结束(不必)。其余的应该等于零。一个限制:不允许迭代,只允许纯pandas。
预期输出:

s_new = pd.Series([0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0])
xxe27gdn

xxe27gdn1#

您可以通过首先识别0后面的1 s,计算cumsum并保持块等于1来识别1的第一块:

out = s.where(s.diff().eq(1).cumsum().eq(1), 0)

输出:

0     0
1     0
2     0
3     1
4     1
5     1
6     1
7     0
8     0
9     0
10    0
11    0
12    0
13    0
14    0
15    0
dtype: int64

中间体:

s  diff  eq(1)  cumsum
0   0   NaN  False       0
1   0   0.0  False       0
2   0   0.0  False       0
3   1   1.0   True       1
4   1   0.0  False       1
5   1   0.0  False       1
6   1   0.0  False       1
7   0  -1.0  False       1
8   1   1.0   True       2
9   0  -1.0  False       2
10  0   0.0  False       2
11  1   1.0   True       3
12  1   0.0  False       3
13  1   0.0  False       3
14  0  -1.0  False       3
15  1   1.0   True       4

相关问题