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
谢谢。有效! –