Уникальные записи в таблице Astropy Python - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть таблица Astropy,

VHzQ_list 

, которая имеет длину 463 записей и имеет столбец с именем «na», где

np.unique(VHzQ_list['na'])

дает список из 21 записи,

ATLAS
CFHQS
DELS
ELAIS 
... 
VIMOS

Я хотел бы знать, сколько записей из 463 имеют значения na = 'ATLAS', na = CFHQS и т. Д. Для фрейма данных я бы сделал:

df.groupby('na').size().sort_values(ascending=False)

но

VHzQ_list.group_by('na').size().sort_values(ascending=False)

выдает ошибку

AttributeError: 'Table' object has no attribute 'size'

.Какой здесь Таблица Астропии эквивалентна .size () ??

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

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
0 голосов
/ 15 декабря 2018

Вы уже знаете, как это сделать в пандах, но это также легко сделать с помощью метода pandas.Series.value_counts.Как уже отмечалось, таблицы Астропии не являются точной копией панд по функциональности и объему.У них есть to_pandas и from_pandas удобные методы, позволяющие легко переходить назад и вперед.

VHzQ_list.to_pandas()['na'].value_counts()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...