我有一种大 DataFrame,因此无法在 O(n²) 上排序。我想按两列排序,其中一列已经排序。
df = pd.DataFrame({
'col1': [ 0, 0, 1, 2, 2, 2],
'col2': [ 'c', 'a', 'b', 'e', 'h', 'f']
})
df2 = sort_ordered(df, 'col1', 'col2')
assert df2.equals(df.sort_values(['col1', 'col2']))
假设第一列已经排序,我如何按这两列排序。这样,它就不再是 O(n²),而是 O(n*k),其中 k 是第一列的每个“分区”中的元素数量(1 到 10 之间),这将是一个主要是线性的算法.
import pandas as pd
df= pd.DataFrame({
'col1': [ 0, 0, 1, 2, 2, 2],
'col2': [ 'c', 'a', 'b', 'e', 'h', 'f']
})
df2 = df.sort_values(by = ['col1', 'col2'])
print(df2)
输出:
col1 col2
1 0 a
0 0 c
2 1 b
3 2 e
5 2 f
4 2 h