Ahoj,
df['mesto'] == 'babisov' ti vrátí pole boolean hodnot, teoreticky ti stačí udělat něco jako sum(df['mesto'] == 'babisov').
Ty hodnoty v ostatních sloupcích jsou vždycky stejné (pro jedno město), nebo se nějak liší? Pokud jsou stejné, tak by se teoreticky dalo udělat něco takového: df.groupby(['mesto', 'sloupec1', 'sloupec2', 'sloupec3']).count()
Pokud potřebuješ každý sloupec agregovat pomocí jiné funkce, použij tuším metodu agg, vypadá to pak nějak takto: df.groupby('mesto').agg({'sloupec1': sum, 'sloupec2': len, 'sloupec3': max})
Pokud ti úplně stačí mít výpis měst a jejich počet a ostatní slupce tě protentokrát nezajímají, pak můžeš zkusit df['mesto'].count_values()
mj.