我需要对数据框的每一列进行排名。我目前正在使用以下代码:
for x in range(1,len(cols)):
data[cols[x]] = data[cols[x]].rank(ascending=0)
这适用于小型数据集。我有超过50,000列和20,000行。有没有办法可以通过Threadpool更快地实现。尝试下面的代码,但它没有工作。它正在返回空集。
cols = rankDset.columns.tolist()
def rank_columns(c):
rankDset[c] = rankDset[c].rank(ascending=0)
def parallelDataframe(df, func):
pool = Pool(8)
pool.map(func, cols)
pool.close()
pool.join()
parallelDataframe(rankDset, rank_columns)
答案 0 :(得分:2)
您应该能够使用pd.DataFrame.rank
对每一列进行排名:
df.rank()
来自Docs
沿轴计算数值数据等级(1到n)。
轴:{0或'索引',1或'列'},默认为0
直接排名指数
考虑数据框df
np.random.seed([3,1415])
df = pd.DataFrame(dict(
A=np.random.choice(np.arange(10), 5, False),
B=np.random.choice(np.arange(10), 5, False),
C=np.random.choice(np.arange(10), 5, False),
D=np.random.choice(np.arange(10), 5, False),
))
df
A B C D
0 9 1 6 0
1 4 3 8 2
2 5 5 9 6
3 1 9 7 1
4 7 4 3 9
然后排名产生
df.rank()
A B C D
0 5.0 1.0 2.0 1.0
1 2.0 2.0 4.0 3.0
2 3.0 4.0 5.0 4.0
3 1.0 5.0 3.0 2.0
4 4.0 3.0 1.0 5.0