I have a dataframe:
id value 0 a w 1 a l 2 a l 3 a w 4 a w 5 a w 6 a l
when I do df.groupby("id").cumcount() it returns:
0 0 1 1 2 2 3 3 4 4 5 5 6 6
I want to count only those ones that equal w in column value and it must be in dataframe form:
0 0 3 0 4 1 5 2
How to do that with cumcount function?
Advertisement
Answer
Use:
res = df.groupby((df["value"] != df["value"].shift()).cumsum()).cumcount()
res = res[df["value"].eq("w")]
print(res)
Output
0 0 3 0 4 1 5 2 dtype: int64
As an alternative:
s = (df["value"] != df["value"].shift()).cumsum()
res = s.groupby(s).cumcount()
res = res[df["value"].eq("w")]
print(res)