我需要对数据帧的每一列进行排名。我目前正在使用以下代码:
for x in range(1,len(cols)):
data[cols[x]] = data[cols[x]].rank(ascending=0)
这适用于小型数据集。我有超过 50,000 列和 20,000 行。有没有办法可以使用线程池更快地实现。尝试了下面的代码但它不起作用。它返回空集。
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
Compute numerical data ranks (1 through n) along axis.
axis: {0 or ‘index’, 1 or ‘columns’}, default 0
index to direct ranking
考虑数据帧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
关于python - Pandas 使用线程池对庞大数据集的多列进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43395713/