我需要找到最快的方法来对具有数百万行和大约一百列的数据框中的每一行进行排序。
所以像这样:
A B C D
3 4 8 1
9 2 7 2
需要成为:
A B C D
8 4 3 1
9 7 2 2
现在我正在对每一行应用排序并逐行构建一个新的数据框。我还对每一行做了一些额外的、不太重要的事情(因此我使用 pandas 而不是 numpy)。创建一个列表列表然后立即构建新数据框会更快吗?或者我需要使用 cython 吗?
最佳答案
我想我会在 numpy 中这样做:
In [11]: a = df.values
In [12]: a.sort(axis=1) # no ascending argument
In [13]: a = a[:, ::-1] # so reverse
In [14]: a
Out[14]:
array([[8, 4, 3, 1],
[9, 7, 2, 2]])
In [15]: pd.DataFrame(a, df.index, df.columns)
Out[15]:
A B C D
0 8 4 3 1
1 9 7 2 2
我原以为这可能有用,但它对列进行了排序:
In [21]: df.sort(axis=1, ascending=False)
Out[21]:
D C B A
0 1 8 4 3
1 2 7 2 9
啊,pandas 提高了:
In [22]: df.sort(df.columns, axis=1, ascending=False)
ValueError: When sorting by column, axis must be 0 (rows)
关于python - 对 Pandas 数据框中的每一行进行排序的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25817930/