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)]