gpt4 book ai didi

python-3.x - 加速 agg 并加入十亿记录的 Pandas 表

转载 作者:行者123 更新时间:2023-12-04 12:03:29 25 4
gpt4 key购买 nike

[python 3.5.2, pandas 0.24.1, numpy 1.16.1, scipy 1.2.0]
我有以下 Pandas 数据框

data_pd
nrows: 1,032,749,584
cols: ['mem_id':np.uint32, 'offset':np.uint16 , 'ctype':string, 'code':string]

obsmap_pd
nrows: 10,887,542
cols: ['mem_id':np.uint32, 'obs_id':np.uint32]
(obs_id has consecutive integers between 0 and obsmap_pd nrows)

varmap_pd
nrows: 4,596
cols: ['ctype':string, 'code': string, 'var_id':np.uint16]
(var_id has consecutive integers between 0 and varmap_pd nrows)

这些是我正在运行的步骤
***
sparse_pd = data_pd.groupby(['mem_id','ctype','code'])['offset'].nunique().reset_index(name='value')
sparse_pd['value'] = sparse_pd['value'].astype(np.uint16)
sparse_pd = pd.merge(pd.merge(sparse_pd, obsmap_pd, on='mem_id', sort=False),
varmap_pd, on=['ctype','code'], sort=False)[['obs_id','var_id','value']]
***

这样做的目的是为了在下一步中创建一个 scipy csc_matrix
mat_csc = csc_matrix((sparse_pd['value'].values*1., (sparse_pd['obs_id'].values,sparse_pd['var_id'].values)), 
shape=(obsmap_pd.shape[0],varmap_pd.shape[0]))

csc_matrix 的创建非常快,但是带有pandas 代码的三行(*** 之间)需要25.7 分钟。关于如何加快速度的任何想法?

最佳答案

加速合并的一个好方法是使用 join 代替:

sparse_pd = sparse_pd.\
.set_index(['mem_id']).join(obsmap_pd.set_index('mem_id']))

sparse_pd = sparse_pd.\
.reset_index().set_index(['ctype','code']).join(varmap_pd.set_index(['ctype','code'])).loc['obs_id','var_id','value']
另外,考虑使用 pandas 中的管道模块( documentation here );
你失去了一些可读性,但它可能更优化。

关于python-3.x - 加速 agg 并加入十亿记录的 Pandas 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54566096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com