为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英3389331 2021-10-12 16:20:37
我在数据框中有一列填充了布尔值的列,我想计算它从 True 变为 False 的次数。当我将布尔值转换为 1 和 0 时,我可以这样做,然后使用df.diff然后将该答案除以 2import pandas as pdd = {'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    True1    True2    True3   False4   False5   False6    True7    True8    True9    True10  False11  False12  False13   True14   True15  False16  False我的预期结果是 The amount of times False came up is 3
查看完整描述

3 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

您可以使用掩码执行 a bitwise and,该Col1掩码指示连续行中发生更改的位置:


(df.Col1 & (df.Col1 != df.Col1.shift(1))).sum()

3

其中掩码是通过Col1与自身 ( pd.shift)的移位版本进行比较而获得的:


df.Col1 != df.Col1.shift(1)


0      True

1     False

2     False

3      True

4     False

5     False

6      True

7     False

8     False

9     False

10     True

11    False

12    False

13     True

14    False

15    False

16    False

17    False

Name: Col1, dtype: bool

对于多列,您可以执行完全相同的操作(这里我使用col2相同的 to进行了测试col1)


(df & (df != df.shift(1))).sum()


Col1    3

Col2    3

dtype: int64


查看完整回答
反对 回复 2021-10-12
?
慕后森

TA贡献1802条经验 获得超5个赞

请注意,从整数项中的( ) 中减去True1)给出:False0-1

res = df['Col1'].astype(int).diff().eq(-1).sum()  # 3

要应用于布尔数据框,您可以构建一个系列映射标签来计数:

res = df.astype(int).diff().eq(-1).sum()


查看完整回答
反对 回复 2021-10-12
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

只是提供不同的想法


df.cumsum()[~df.Col1].nunique()

Out[408]: 

Col1    3

dtype: int64


查看完整回答
反对 回复 2021-10-12
  • 3 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信