我想对PyTables表进行排序。对单个列进行排序很简单:我可以为要排序的列创建一个cs_index,然后使用Table.itersorted()以排序顺序获取行,我将逐行插入到新表中)。
问题是我想在两个列上对表进行排序。
该表格如下:
chr start end
------------------
chr1 1000 2000
chr1 1500 3000
chr2 1000 5000
chr2 1200 2000
在这个例子中,顺序是正确的,即首先它在'chr'上排序,然后在'start'上排序。是否有可能以优雅的方式实现这种双列排序?
P.S。我知道我可以通过提取列进行排序,然后使用numpy.lexsort对内存中的numpy数组进行排序,但我工作的数据有时可能太大(可能是数十亿行)......
答案 0 :(得分:0)
我不认为你在寻找什么是在Pytables中实现的。所以你可能必须自己做。我的建议是:在两列上放一个csi_index,当你需要以排序的方式处理数据时,你需要自己实现迭代。将由一列排序的足够小的位拉入内存,然后对其进行处理(相对于另一列进行排序并处理数据)。
希望这有帮助