如何统计一个值连续出现的次数?

ano*_*ser 3 dataframe python-3.x pandas

在 pandas 数据框中,我试图计算 True 连续出现的次数。

(例如,True、True、True 表示连续出现 2 次)

输入:

df = pd.DataFrame({"A": [False, False, True, True, False, True, False, False, False, False, True, True, True, True, False, True, True, True]})
Run Code Online (Sandbox Code Playgroud)

输出:

6
Run Code Online (Sandbox Code Playgroud)

我实在不知道如何解答这个问题。

Sco*_*ton 5

这是一种方法:

grp = (~df['A']).cumsum()
df['A'].groupby(grp).sum().sub(1).clip(0,).sum()
Run Code Online (Sandbox Code Playgroud)

输出:

6
Run Code Online (Sandbox Code Playgroud)

使用 False 值上的 cumsum 创建所有 true 值的分组,然后对每个组中的 True 值求和,并为定义该组的第一个 False 减去 1。使用 Clip 消除不具有 True 的组并对这些值求和。


这是通过数据框列分步骤分解的另一种方法。

df['B'] = (~df['A']).cumsum()
df['C'] = df.duplicated(['A', 'B'], keep='first')
df['C'].sum()
Run Code Online (Sandbox Code Playgroud)

输出:

6
Run Code Online (Sandbox Code Playgroud)

详细输出:

        A  B      C
0   False  1  False
1   False  2  False
2    True  2  False
3    True  2   True
4   False  3  False
5    True  3  False
6   False  4  False
7   False  5  False
8   False  6  False
9   False  7  False
10   True  7  False
11   True  7   True
12   True  7   True
13   True  7   True
14  False  8  False
15   True  8  False
16   True  8   True
17   True  8   True
Run Code Online (Sandbox Code Playgroud)