如何计算pandas中numpy数组的百分位排名

8yoxcaq7  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(100)

我有一个600行100列的Pandas DataFrame。我目前使用这段代码来计算pandas中的排名:

df[rankCols].transform('rank', pct=True)

但是我想用numpy来计算它以提高速度。因为我稍后将DataFrame转换为numpy数组。
如何在numpy中计算相同的值?我可以使用argsort()进行排名,但它不计算百分位数排名。

a1o7rhls

a1o7rhls1#

你可以通过更进一步来实现百分位排名。

percentages = ranks / (data.shape[0] - 1)

简单地从argsort扩展生成的ndarray似乎可以满足您的目的?

oug3syen

oug3syen2#

直接使用Numpy创建百分比排名可能会很复杂。但是,你可以尝试以下方法,看看它是否对你有帮助。

import numpy as np
import pandas as pd

def percentile_rank(arr):
    sorted_indices = np.argsort(arr)
    sorted_rank = np.argsort(sorted_indices)
    percentile_rank = (sorted_rank + 1) / (len(sorted_rank))
    return percentile_rank

np.random.seed(42)
df = pd.DataFrame(np.random.rand(600, 100), columns=[f'col_{i}' for i in range(100)])

rankCols = df.columns

percentile_ranks = df[rankCols].apply(percentile_rank)

相关问题