计算列中布尔值从 True 变为 False 的次数

我在数据框中有一列填充了布尔值的列,我想计算它从 True 变为 False 的次数。


当我将布尔值转换为 1 和 0 时,我可以这样做,然后使用df.diff然后将该答案除以 2


import pandas as pd


d = {'Col1': [True, True, True, False, False, False, True, True, True, True, False, False, False, True, True, False, False, True, ]}



df = pd.DataFrame(data=d)



print(df)


0    True

1    True

2    True

3   False

4   False

5   False

6    True

7    True

8    True

9    True

10  False

11  False

12  False

13   True

14   True

15  False

16  False

我的预期结果是 The amount of times False came up is 3


慕桂英3389331
浏览 183回答 3
3回答

郎朗坤

您可以使用掩码执行 a bitwise and,该Col1掩码指示连续行中发生更改的位置:(df.Col1 & (df.Col1 != df.Col1.shift(1))).sum()3其中掩码是通过Col1与自身 ( pd.shift)的移位版本进行比较而获得的:df.Col1 != df.Col1.shift(1)0      True1     False2     False3      True4     False5     False6      True7     False8     False9     False10     True11    False12    False13     True14    False15    False16    False17    FalseName: Col1, dtype: bool对于多列,您可以执行完全相同的操作(这里我使用col2相同的 to进行了测试col1)(df & (df != df.shift(1))).sum()Col1    3Col2    3dtype: int64

慕后森

请注意,从整数项中的( ) 中减去True( 1)给出:False0-1res = df['Col1'].astype(int).diff().eq(-1).sum()  # 3要应用于布尔数据框,您可以构建一个系列映射标签来计数:res = df.astype(int).diff().eq(-1).sum()

繁星点点滴滴

只是提供不同的想法df.cumsum()[~df.Col1].nunique()Out[408]: Col1    3dtype: int64
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python