Pandas dataframe:计算连续的True / False值



我有一个布尔值True/False-column "Mask";在数据帧中,例如:

Mask
True
True
True
False
False
True
False
False

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

Mask     Count
True     3
True     3
True     3
False   -2
False   -2
True     1
False   -2
False   -2

我尝试了groupbysum,但现在我的头打结了。

试过

mask.groupby((~mask).cumsum()).cumsum().astype(int)

(maskTrue/False的条件),但这只计算true,并且计数而不是显示总和。

非常感谢任何建议!

可以通过.cumsum()获取连续True/False的组号,并代入g

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

g = df['Mask'].ne(df['Mask'].shift()).cumsum()
df['Count'] = df.groupby(g)['Mask'].transform('size') * np.where(df['Mask'], 1, -1)

结果:

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

相关内容

  • 没有找到相关文章

最新更新