我正在使用for循环对非常大的pandas数据框的每一列进行排序。但是,此过程将花费很长时间,因为数据框具有超过一百万列。我希望这个过程比现在运行的快得多。
这是我目前的代码:
top25s = []
for i in range(1, len(mylist)):
topchoices = df.sort_values(i, ascending=False).iloc[0:25, 0].values
top25s.append(topchoices)
这里len(mylist)是14256,但将来很容易会超过1000000。 df的尺寸为343行×14256列。
感谢您的所有投入!
答案 0 :(得分:0)
您可以使用nlargest
:
df.apply(lambda x: x.nlargest(25).reset_index(drop=True))
但是我怀疑这会为您赢得很多时间。如前所述,您只是需要处理大量数据。
答案 1 :(得分:0)
我建议使用numpy的帮助。哪个可以大大加快速度。
以下代码将返回一个二维numpy数组,其中每列中有top25个元素。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(50,100)) # Generate random data
rank = df.rank(axis = 0, ascending=False)
top25s = np.extract(rank<=25, df).reshape(25, 100)