首页 > 解决方案 > 熊猫数据框:计算连续的真/假值

问题描述

我在数据框中有一个布尔True/-False列“ 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 并进行计数而不是显示总和。

非常感谢任何建议!

标签: pythonpandas

解决方案


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

然后, group by并通过+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)

结果:

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

推荐阅读