The problem lies in the definition of subgroups: in the subgroup state, the token GROUP can result in either shifting or reducing (shift taking this as a new group to parse, reduce recognizing subgroups-handled-so-far and leaving GROUP to be rescanned to make a new group), and the token ']' can also result in shifting or reducing (similar reasoning).
I think your intent is such that you can rewrite this as:
subgroups : "[" sublist_opt "]"
with:
sublist_opt : group sublist_opt
| empty
(I leave you to fill in the python code for this grammar fragment).