Pandas使用Threadpool对大数据集排列多列

问题描述:

我需要对数据帧的每一列进行排名。我目前使用下面的代码:Pandas使用Threadpool对大数据集排列多列

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) 

您应该能够通过使用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 
+0

谢谢。有效! –