Pandas 数据框:计算连续的 True / False 值

Raz*_*zle 1 python pandas

我在数据框中有一个布尔True/ False-列“ ”,例如:Mask

Mask
True
True
True
False
False
True
False
False
Run Code Online (Sandbox Code Playgroud)

现在我尝试添加一列,其中包含连续True/False行的计数,其中True是正和(计数为+1),False是负和(计数为-1),例如

Mask     Count
True     3
True     3
True     3
False   -2
False   -2
True     1
False   -2
False   -2
Run Code Online (Sandbox Code Playgroud)

我尝试过groupbysum但现在我脑子里有一个结。

尝试过类似的东西

mask.groupby((~mask).cumsum()).cumsum().astype(int)
Run Code Online (Sandbox Code Playgroud)

(是/mask的条件) 但这仅计算 True 并进行计数而不显示总和。TrueFalse

非常感谢任何建议!

Sea*_*ean 5

可以得到连续True/ Falseby的组号.cumsum()并放入 中g

然后,分组并通过+g获取每个组的大小/计数。通过乘以 的返回值(或)来设置符号,如下所示:.transform().size()1-1np.where()

g = df['Mask'].ne(df['Mask'].shift()).cumsum()

df['Count'] = df.groupby(g)['Mask'].transform('size') * np.where(df['Mask'], 1, -1)
Run Code Online (Sandbox Code Playgroud)

结果:

print(df)

    Mask  Count
0   True      3
1   True      3
2   True      3
3  False     -2
4  False     -2
5   True      1
6  False     -2
7  False     -2
Run Code Online (Sandbox Code Playgroud)