我们可以将 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
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()
实际上我是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
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()