我有一个600行100列的Pandas DataFrame。我目前使用这段代码来计算pandas中的排名:
df[rankCols].transform('rank', pct=True)
但是我想用numpy来计算它以提高速度。因为我稍后将DataFrame转换为numpy数组。如何在numpy中计算相同的值?我可以使用argsort()进行排名,但它不计算百分位数排名。
a1o7rhls1#
你可以通过更进一步来实现百分位排名。
percentages = ranks / (data.shape[0] - 1)
简单地从argsort扩展生成的ndarray似乎可以满足您的目的?
argsort
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)
2条答案
按热度按时间a1o7rhls1#
你可以通过更进一步来实现百分位排名。
简单地从
argsort
扩展生成的ndarray似乎可以满足您的目的?oug3syen2#
直接使用Numpy创建百分比排名可能会很复杂。但是,你可以尝试以下方法,看看它是否对你有帮助。