【发布时间】:2021-11-05 21:05:03
【问题描述】:
目前我有一个数据框,我对每一列的值进行排名并将它们输出到一个新的数据框中。示例代码如下:
df = pd.DataFrame(np.random.randint(0, 500, size=(500, 1000)), columns=list(range(0, 1000)))
ranking = pd.DataFrame(range(0, 500), columns=['Lineup'])
ranking = pd.concat([ranking, df[range(0, 1000)].rank(ascending=False, method='min')],
axis=1)
df 是值的数据框,每个列标题是一个整数,每连续一列增加 1。排名首先由“Lineup”以单列作为标识符创建,然后将数据框“df”连接起来并同时进行排名。
现在的问题是,这是最快的方法吗?当有数万列和数百行时,这可能比我希望的要长得多。有没有一种方法可以使用列表理解来加快速度,或者使用某种其他方法来输出列表、字典、数据框或其他任何我可以用于未来步骤的方法。
谢谢
【问题讨论】:
-
我尝试了
scipy.stats.rankdata(~df, method='min', axis=0)和np.argsort(np.argsort(~df, axis=0), axis=0)使用不同大小的数组。每次,df.rank(ascending=False, method='min')都比其他方法快。
标签: python pandas dataframe performance rank