python - Pandas 使用线程池对庞大数据集的多列进行排名

标签 python pandas dataframe python-multithreading

我需要对数据帧的每一列进行排名。我目前正在使用以下代码:

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/

相关文章:

python - 使用 scipy.fftpack 绘制的 fft 图中出现恒定线

python - 根据列的值将 Pandas 数据框拆分为多个数据框

python - Python线程自调用线程意外行为

python - 如何找到给定文件的路径?

python-2.7 - 在Python Pandas中训练朴素贝叶斯的不同类型的功能

python - Pandas :如何检查数据框列中的任何列表是否存在于另一个数据框的范围内?

python - Pandas :连接数据框并保留重复索引

scala - 由 org.apache.spark.sql.Dataset 处的 : java. lang.NullPointerException 引起

python - 无法从数据库返回数组

javascript - Django:在脚本中使用上下文变量