pandas - 连续零计数(多索引)
问题描述
我正在尝试计算连续的零:
每次出现非零值时,重新开始binary column
计数Consec Column
binary consec
1 1 0
2 0 1
3 0 2
4 0 3
5 0 4
5 1 0
6 0 1
7 0 2
8 1 0
做这个解决方案,我可以做到
df = pd.DataFrame({"binary": [0,1,1,1,0,0,1,1,0]})
df["consec"] = df["binary"].groupby((df["binary"] != 0).cumsum()).cumcount()
binary consec
1 1 0
2 0 1
3 0 2
4 0 3
5 0 4
5 1 0
6 0 1
7 0 2
8 1 0
但是,我想对这样的多索引情况做同样的事情:
import pandas as pd
df = pd.DataFrame({"gp_1": [1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2], "gp_2": [1,1,1,1,1,1,1,1,1,3,3,3,3,4,4,4,4,4], "binary": [0,1,1,1,0,0,1,1,0, 0,1,1,1,0,0,1,1,0]})
预期输出:
gp_1 gp_2 binary consec
0 1 1 0 1
1 1 1 1 0
2 1 1 1 0
3 1 1 1 0
4 1 1 0 1
5 1 1 0 2
6 1 1 1 0
7 1 1 1 0
8 1 1 0 1
9 2 3 0 1
10 2 3 1 0
11 2 3 1 0
12 2 4 0 1
13 2 4 0 2
14 2 4 0 3
15 2 4 1 0
16 2 4 1 0
17 2 4 0 1
解决方案
让我们试试
df.groupby([df.gp_1,df.gp_2,df.binary.diff().ne(0).cumsum()]).cumcount().add(1).where(df.binary==0,0)
Out[149]:
0 1
1 0
2 0
3 0
4 1
5 2
6 0
7 0
8 1
9 1
10 0
11 0
12 1
13 2
14 3
15 0
16 0
17 1
dtype: int64
推荐阅读
- css - Sass:动态设置列表项的增量填充
- verilog - 使用 assign 语句创建 bcs 始终输出 X
- python - Keras Conv2D 内核
- python-3.x - 线程切换是否仅在 time.sleep(1) 或 IO 请求时发生?
- spring - 如何为 Spring Data Rest 存储库和 Querydsl 定义请求日期格式
- c++ - 禁用快速编辑模式时,SetConsoleMode 返回 ERROR_INVALID_PARAMETER
- java - 如何使用 txt 文件中的数据填充 HashMap
- python - 尝试创建新列表时出现“Nonetype”错误
- opencv - 在帧之间获得对象移动的最佳方法?
- docker - 在 docker 中获取 apereo/cas 以从白名单中进行身份验证