I have a DataFrame:
dct = {'A':['abc','abc','abc', 'xyz', 'xyz','abc','abc','abc', 'xyz', 'xyz', 'xyz', 'xyz'],
'B':['a','a','a','a','a','z','z','z','p','p','p','q'],
'C':[1,1,1,1,2,5,5,5,9,9,9,9],
'GROUP':[123,123,123,123,123,456,456,456,767,767,767,767]
}
df = pd.DataFrame(dct)
A B C GROUP
0 abc a 1 123
1 abc a 1 123
2 abc a 1 123
3 xyz a 1 123
4 xyz a 2 123
5 abc z 5 456
6 abc z 5 456
7 abc z 5 456
8 xyz p 9 767
9 xyz p 9 767
10 xyz p 9 767
11 xyz q 9 767
I am trying to create a new column called 'change'.
Assume that I am grouping by Group, and a change occurs when anything in columns A, B or C changes from the previous row. 'change' is incremented by 1 for that group. If nothing changes the same value remains. When a new group starts the change value begins again at 1. I am able to accomplish this using lists and loops but feel like there should be a more pythonic resolution using pandas?
Example output would look like this:
A B C GROUP change
0 abc a 1 123 1
1 abc a 1 123 1
2 abc a 1 123 1
3 xyz a 1 123 2
4 xyz a 2 123 3
5 abc z 5 456 1
6 abc z 5 456 1
7 abc z 5 456 1
8 xyz p 9 767 1
9 xyz p 9 767 1
10 xyz p 9 767 1
11 xyz q 9 767 2