我们可以将 diff() 用于 Python 中的条件吗?

Can we use diff() for condition in Python?

实际上我是Python的新手,只是尝试执行下面的算法但是我得到了一个错误。(ValueError:系列的真值不明确。使用a.empty,a.bool()、a.item()、a.any() 或 a.all()。) 如果 'A' 的值相等,我想计算时间。

import numpy as np
import pandas as pd
n=10000000
count=0
df=pd.DataFrame(np.random.randint(0,2,size=(n,1)),columns=['A'])
check =df['A'].diff().eq(0).astype(int)
if check==0:
   count = count+1
   df['B']=count
print(df)

尝试根据当前值不等于下一个值的位置创建布尔索引。

样本df:

df = pd.DataFrame({'A': [1, 1, 0, 0, 1, 1, 1]})
   A
0  1
1  1
2  0
3  0
4  1
5  1
6  1

索引 shift + cumsum:

df['A'].ne(df['A'].shift()).cumsum()
0    1
1    1
2    2
3    2
4    3
5    3
6    3
Name: A, dtype: int32

使用groupby cumcount中的索引枚举各组:

df['B'] = df.groupby(df['A'].ne(df['A'].shift()).cumsum()).cumcount()
   A  B
0  1  0
1  1  1
2  0  0
3  0  1
4  1  0
5  1  1
6  1  2

完整代码:

import pandas as pd

df = pd.DataFrame({'A': [1, 1, 0, 0, 1, 1, 1]})
df['B'] = df.groupby(df['A'].ne(df['A'].shift()).cumsum()).cumcount()