检测 Pandas DataFrame 列中的连续重复而不进行迭代

Zar*_*rif 3 python pandas

因此,根据这个答案,最好不要迭代 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)

也许值得一提的是,这是一个时间序列,因此顺序至关重要。

ank*_*_91 5

你可以这样做:

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)