Простым решением здесь будет подсчет запятых:
df['Schools_list'].str.count(',').add(1).groupby(df.State).sum()
State
S1 4
S2 3
S3 4
Name: Schools_list, dtype: int64
Обратите внимание, что после того, как вы посчитаете запятые, сгруппируйте по имени штата, чтобы получить счет по состоянию.
Как DataFrame,
(df['Schools_list'].str.count(',')
.add(1)
.groupby(df.State)
.sum()
.reset_index(name='Schools_count'))
State Schools_count
0 S1 4
1 S2 3
2 S3 4
Вы также можете разделить запятую и найти длину созданных списков, но это немного медленнее.
df['Schools_list'].str.split(',+').str.len().groupby(df.State).sum()
State
S1 4
S2 3
S3 4
Name: Schools_list, dtype: int64