Indexing should work just like numpy. You can either have zero-based indexing for both old and new groups (and ignore as many of either as you want), or you can have zero-based indexing for both groups, if you concatenate the new_b and b first and then index, instead of the other way around.
Your last example is odd, because you have a new_idx with values 1 to 3 on new_b which only has two entries. Sounds like you want the concatenate first and then index logic?