慕斯王
对于数字数据的大型数据帧,您可能会看到显着的性能改进numpy.lexsort,使用一系列键执行间接排序:import pandas as pdimport numpy as np
np.random.seed(0)df1 = pd.DataFrame(np.random.randint(1, 5, (10,2)), columns=['a','b'])df1 = pd.concat([df1]*100000)def pdsort(df1):
return df1.sort_values(['a', 'b'], ascending=[True, False])def lex(df1):
arr = df1.values return pd.DataFrame(arr[np.lexsort((-arr[:, 1], arr[:, 0]))])assert (pdsort(df1).values == lex(df1).values).all()%timeit pdsort(df1) # 193 ms per loop%timeit lex(df1) # 143 ms per loop一个特点是定义的排序顺序numpy.lexsort是相反的:首先(-'b', 'a')按系列排序a。我们否定系列b反映我们希望这个系列按降序排列。