James... numpy... did a split and count of a featureclass of mostly equal polygons.  The process is like df.groupby
The big difference is you call the da.SearchCursor as usual, the line 5 is the key, it is what the ArcGIS module uses extensively in its code as I posted in my last blog.
in_fc = r"C:\no_space\path\testdata.gdb\Carp_5x5"   
sc = arcpy.da.SearchCursor(in_fc, ['OBJECTID', 'Shape', 'Class'], explode_to_points=True)
arr = sc._as_narray()
un, idx, cnts = np.unique(arr['Class'], return_index=True, return_counts=True)
un
array(['A01', 'A02', 'A03', ..., 'E03', 'E04', 'E05'], 
      dtype='<U5')
idx
array([  0,   5,  10, ..., 109, 114, 119], dtype=int64)
cnts
array([5, 5, 5, ..., 5, 5, 5], dtype=int64)
result = np.asarray(list(zip(un, cnts)), dtype=[('Class', '<U5'), ('Counts', '<i4')])
result
array([('A01', 5), ('A02', 5), ('A03', 5), ..., ('E03', 5), ('E04', 5),
       ('E05', 5)], 
      dtype=[('Class', '<U5'), ('Counts', '<i4')])
result.tolist()
 
[('A01', 5),
 ('A02', 5),
 ('A03', 5),
 ('A04', 5),
 ('A05', 5),
 ('B01', 5),
 ('B02', 5),
 ('B03', 5),
 ('B04', 5),
 ('B05', 5),
 ('C01', 5),
 ('C02', 5),
 ('C03', 4),
 ('C03E', 4),
 ('C03N', 4),
 ('C03S', 4),
 ('C04', 5),
 ('C05', 5),
 ('D01', 5),
 ('D02', 5),
 ('D03', 5),
 ('D04', 5),
 ('D05', 5),
 ('E01', 5),
 ('E02', 5),
 ('E03', 5),
 ('E04', 5),
 ('E05', 5)]