您可以使用compare-cumsum-groupby模式(我 确实 需要解决这个问题才能编写文档),最后是
cumcount:
>>> df = pd.Dataframe({"binary": [0,1,1,1,0,0,1,1,0]})>>> df["consec"] = df["binary"].groupby((df["binary"] == 0).cumsum()).cumcount()>>> df binary consec0 0 01 1 12 1 23 1 34 0 05 0 06 1 17 1 28 0 0
之所以有效,是因为首先我们得到了要重置计数器的位置:
>>> (df["binary"] == 0)0 True1 False2 False3 False4 True5 True6 False7 False8 TrueName: binary, dtype: bool
这些的总和为每个组提供了不同的ID:
>>> (df["binary"] == 0).cumsum()0 11 12 13 14 25 36 37 38 4Name: binary, dtype: int64
然后,我们可以将其传递给
groupby并用于
cumcount获取每个组中的递增索引。