2014-02-04 4 views
1

Я хочу отсортировать таблицу PyTables. Сортировка по одному столбцу проста: я могу просто создать cs_index для столбца, который я хочу сортировать, а затем использовать Table.itersorted(), чтобы получить строки в отсортированном порядке, которые я вставляю в новую таблицу, по очереди).Сортировка таблицы PyTables по двум столбцам

Проблема в том, что я хочу сортировать таблицу на две колонки.

В таблице в следующем виде:

chr start end  
------------------ 
chr1 1000 2000 
chr1 1500 3000 
chr2 1000 5000 
chr2 1200 2000 

В этом примере порядок является правильным, то есть сначала отсортирован на «CHR», а затем на «старт». Можно ли добиться этой двухколоночной сортировки элегантным способом?

P.S. Я знаю, что я могу сортировать, извлекая столбцы, а затем сортировать массивы numpy в памяти с помощью numpy.lexsort, но данные, которые я работаю, иногда могут быть слишком большими (возможно, миллиарды строк) ...

ответ

0

Я не думаю, что то, что вы ищете, реализовано в Pytables. Поэтому вам, вероятно, придется это сделать самому. Моим советом было бы: поместить csi_index в оба столбца, и когда вам нужно обрабатывать данные в порядке сортировки, вам нужно реализовать итерацию самостоятельно. Вытяните достаточно маленькие бит, отсортированные по одному столбцу, в память, а затем поработайте над этим (сортировка по отношению к другому столбцу и обработка данных).

Надеюсь, что это поможет

Смежные вопросы