我有一个包含数百万行的pandas数据框。我需要通过index
搜索那个is not unique
。在我看来,.loc
的实现是二进制搜索O(logn)
(使用sorted index
)。
问题是,这太慢了。有没有办法在恒定的时间O(1)
中检索给定索引的所有行?也许可以使用某种groupby
吗?后面的实现应该是一个哈希表,将索引作为键,并将行列表作为值。
示例:
RowIndex RowValue1 RowValue2 RowValue3 RowValue4
1 2 2 2 2
1 3 5 4 3
1 5 5 5 5
2 3 3 3 3
2 1 5 6 1
让我们假设RowIndex
是一个排序索引。我想获取索引1
的所有行。那将返回行#1, #2 and #3
(df.loc(1)
)
RowIndex RowValue1 RowValue2 RowValue3 RowValue4
1 2 2 2 2
1 3 5 4 3
1 5 5 5 5
问题是,此操作当前在O(logN)
时间内完成。我需要以某种方式创建一个散列图,该索引将索引作为键存储为值作为行对象的列表。
1 => [Row(2, 2, 2, 2), Row(3, 5, 4, 3), Row(5, 5, 5, 5)]
这样,我将能够在恒定时间内获取所有行。
更新:
我尝试过df.groupby(df.index).agg(lambda x: list(x))
来生成一个准结构,但是它花费的时间太长了。