如何统计Pandas Dataframe指定列中当前连续出现的0的个数
实现方法
我们可以通过pandas的分组累加功能实现需求,完整实现代码如下:
import numpy as np import pandas as pd # 构造示例DataFrame np.random.seed(2021) a = np.random.randint(0, 2, 20) df = pd.DataFrame(a, columns=['No.']) # 计算连续0的计数 df['count'] = df['No.'].groupby(df['No.'].eq(1).cumsum()).cumcount().add(1).where(df['No.'].eq(0), 0) # 输出结果 print(df)
逻辑说明
核心思路是通过分组标记把连续的0归到同一组,再对每组内的元素按顺序计数,最后将值为1的行计数置为0,各步骤作用如下:
df['No.'].eq(1):判断当前行是否为1,得到布尔序列.cumsum():对布尔序列做累加,每遇到1就会让累加值+1,由此将连续的0划分到同一个分组中groupby(上述分组键):按生成的分组键对数据分组.cumcount():返回每个分组内元素的顺序编号,默认从0开始.add(1):将编号加1,匹配从1开始计数的需求.where(df['No.'].eq(0), 0):保留值为0的行的计数结果,值为1的行计数统一设置为0
运行上述代码后,输出结果和你需求的预期结果完全一致。
内容的提问来源于stack exchange,提问作者jaried
相关产品推荐
相关产品推荐

