我们可以在 Python 中使用 diff() 作为条件吗?

问题描述

实际上我是 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,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]})
df['B'] = df.groupby(df['A'].ne(df['A'].shift()).cumsum()).cumcount()