我在数据框中有一列填充了布尔值的列,我想计算它从 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
慕后森
TA贡献1802条经验 获得超5个赞
请注意,从整数项中的( ) 中减去True
( 1
)给出:False
0
-1
res = df['Col1'].astype(int).diff().eq(-1).sum() # 3
要应用于布尔数据框,您可以构建一个系列映射标签来计数:
res = df.astype(int).diff().eq(-1).sum()
添加回答
举报
0/150
提交
取消