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?
CodePudding user response:
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)