在两列上对PyTables表进行排序

时间:2014-02-04 16:55:08

标签: python sorting pytables

我想对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数组进行排序,但我工作的数据有时可能太大(可能是数十亿行)......

1 个答案:

答案 0 :(得分:0)

我不认为你在寻找什么是在Pytables中实现的。所以你可能必须自己做。我的建议是:在两列上放一个csi_index,当你需要以排序的方式处理数据时,你需要自己实现迭代。将由一列排序的足够小的位拉入内存,然后对其进行处理(相对于另一列进行排序并处理数据)。

希望这有帮助