python - 根据开关值识别 pandas 系列中的第一个 block

标签 python pandas

考虑以下 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 值 block 。该 block 在 0 第一次切换到 1 时开始,并在它切换回 1 时结束(不必如此)。其余的应该等于零。一个限制:不允许迭代,只能使用纯 pandas。

预期输出:

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

最佳答案

您可以通过首先识别 0 后面的 1 来识别 1 的第一个 block ,然后计算 cumsum并保持 block 等于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

关于python - 根据开关值识别 pandas 系列中的第一个 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76238390/

相关文章:

带有事件对象的 Python 线程

python - 多处理 - 池分配

python - Python继承检测如何工作?

pandas 在 .json 文件中导出为 TZ 时间格式

python - 如何找到两个 Pandas 列之间的最佳匹配?

python - 拆分 pandas 数据框中的字符串数据

python - tensorflow 中的自定义卷积

python - 在 Amazon EC2 上启动 http 服务器

sql - 格式pandas.Timestamp用于SQLite查询

python - 使用 iloc() 根据范围和单个整数选择列