Skip to content Skip to sidebar Skip to footer

Create A Column Which Increments Value For Changes In Another Row

I have a dataframe with two columns as below: Var1Var2 a 28 b 28 d 28 f 29 f 29 e 30 b 30 m 30 l 30 u 31 t 31 t 31 I'd like to create a third column with v

Solution 1:

You can compare Var2 with its shifted-by-1 version:

v
   Var1  Var2
a     0    28
b     1    28
d     2    28
f     3    30
f     4    30
e     5     2
b     6     2
m     7     2
l     8     2
u     9     5
t    10     5
t    11     5

i = v.Var2    
v['Var3'] = i.ne(i.shift()).cumsum()

v
   Var1  Var2  Var3
a     0    28     1
b     1    28     1
d     2    28     1
f     3    30     2
f     4    30     2
e     5     2     3
b     6     2     3
m     7     2     3
l     8     2     3
u     9     5     4
t    10     5     4
t    11     5     4

Solution 2:

Using category

df.Var2.astype('category').cat.codes.add(1)
Out[525]: 
01112132425363738394104114
dtype: int8

Updated

from itertools import groupby
grouped = [list(g) for k, g in groupby(df.Var2.tolist())]
np.repeat(range(len(grouped)),[len(x) for x in grouped])+1

Solution 3:

Something like this:

(df.Var2.diff()!=0).cumsum()

Post a Comment for "Create A Column Which Increments Value For Changes In Another Row"