Python's collection.Counter
- это простой способ получить ответ здесь:
In [1]: from astropy.table import Table
In [2]: from collections import Counter
In [3]: t = Table([['foo', 'bar', 'foo', 'bar', 'foo', 'baz']], names=['a'])
In [4]: t
Out[4]:
<Table length=6>
a
str3
----
foo
bar
foo
bar
foo
baz
In [5]: Counter(t['a'])
Out[5]: Counter({'foo': 3, 'bar': 2, 'baz': 1})
Чтобы сделать это с Astropy, одним из способов было бы добавить столбец 1, который затем можно агрегировать, но этовероятно, менее гибок, чем pandas, так как я думаю, что агрегатная функция должна применяться ко всем столбцам:
In [23]: t['b'] = 1
In [24]: t
Out[24]:
<Table length=6>
a b
str3 int64
---- -----
foo 1
bar 1
foo 1
bar 1
foo 1
baz 1
In [25]: tg = t.group_by('a')
In [26]: tg.groups.aggregate(sum)
Out[26]:
<Table length=3>
a b
str3 int64
---- -----
bar 2
baz 1
foo 3