2017-04-13 15 views
1

データフレームの各列をランク付けする必要があります。私は現在、以下のコードを使用しています:パンダススレッドプールを使用して巨大なデータセットの複数の列をランク付け

for x in range(1,len(cols)): 
    data[cols[x]] = data[cols[x]].rank(ascending=0) 

これは小さなデータセットで動作します。私は50,000以上の列と2万行を持っています。スレッドプールでより速く達成できる方法はありますか?以下のコードを試してみましたが、動作しませんでした。それは空のセットを返す。

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) 

答えて

2

あなたがpd.DataFrame.rankを使用してすべての列をランク付けすることができなければならない:

df.rank() 

Docs

計算数値データランク(nは1〜)から軸に沿っ。

軸:{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

ありがとうございます。出来た! –

関連する問題