First you can identify which elements in the Grp
column differ from the previous and get the cumulative sum to form the groups you need:
In [9]:
diff_to_previous = df.Grp != df.Grp.shift(1)
diff_to_previous.cumsum()
Out[9]:
0 1
1 2
2 2
3 3
4 3
5 4
6 4
7 5
8 5
9 6
So you can then do
df.groupby(diff_to_previous.cumsum())
to get the desired groupby object