我有一个样本数据集-
Id Category
1 Active
1 Active
1 Active
1 End
2 Paused
2 Active
2 Active
预期输出是一个基于计数器的新列,该列使用id分组,并在类别更改时重置计数器。
预期输出:-
Id Category Count
1 Active 0
1 Active 1
1 Active 2
1 End 0
2 Omitted 0
2 Active 0
2 Active 1
我已经使用了以下-
m = df['Category'] != df['Category'].shift(-1)
df['count'] = np.where(m, df.groupby(m.ne(m.shift(),'Id').cumsum()).cumcount()+1, 0)
但它只填充0
我也试过这个-
mask = df['Id'] == df['Id'].shift(-1)
df['CatChange'] = df['Category'] != df['Category'].shift(-1)
count = df[mask].groupby('Id').cumcount()
df['CatChange_num'] = count
这只是在不考虑类别更改的情况下增加值。
任何指针都会有所帮助。
您可以尝试:
df['count'] = df.groupby(['Id','Category']).cumcount()
如果你想让你的计数从1开始,你可以这样做:
df['count2'] = df.groupby(['Id','Category']).cumcount() + 1
哪个print
:
Id Category count count2
0 1 Active 0 1
1 1 Active 1 2
2 1 Active 2 3
3 1 End 0 1
4 2 Paused 0 1
5 2 Active 0 1
6 2 Active 1 2
我们可以groupby
两列和cumcount
df.groupby(['d','Category']).cumcount()
0 0
1 1
2 2
3 0
4 0
5 0
6 1
dtype: int64