因此,根据这个答案,最好不要迭代 Pandas DataFrame 中的行。但是,我不知道如何在不使用 for 循环的情况下解决我的问题。
我需要检测特定列中的任何连续重复(三次或多次)。因此,例如,如果某个特定 ID 的值 0 出现在连续三行中,我想知道该 ID。
ID Value
1 0
1 0.5
1 0 <--- I need this ID, because there are three consecutive 0s.
1 0
1 0
1 0.2
2 0.1
2 0 <--- Not this one! It only appears twice in a row for this ID.
2 0
3 0
3 0
Run Code Online (Sandbox Code Playgroud)
也许值得一提的是,这是一个时间序列,因此顺序至关重要。
你可以这样做:
f = lambda x:np.diff(np.r_[0,np.flatnonzero(np.diff(x))+1,x.size])[0]
df[(df[['ID','Value']].ne(df[['ID','Value']].shift()).cumsum()
.groupby(['ID','Value'])['Value'].transform(f).ge(3))]
Run Code Online (Sandbox Code Playgroud)
ID Value
2 1 0.0
3 1 0.0
4 1 0.0
Run Code Online (Sandbox Code Playgroud)