Полагаю, ваша цель - разбить ваш фрейм данных на группы в зависимости от размера каждой группы.
Вы можете избежать создания дополнительных переменных, используя словарь. Вы также можете избежать определения границ вручную для каждого среза, используя список. Наконец, вы можете рассчитать размер каждой группы за одну операцию.
L = [3, 6, 9, 12]
sizes = data.groupby('ID')['SOME_COL'].transform('size') # SOME_COL can be any series
data = {}
for key, (len1, len2) in zip('ABC', zip(L, L[1:])):
data[key] = data.loc[sizes.between(len1, len2, inclusive=False)]
В качестве альтернативы, вы можете сформулировать вышеизложенное как словарь:
data = {key: data.loc[sizes.between(len1, len2, inclusive=False)] \
for key, (len1, len2) in zip('ABC', zip(L, L[1:]))}