问题描述
实际上我是 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
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()