python – 加速pandas应用或使用地图
发布时间:2020-12-20 12:00:38 所属栏目:Python 来源:网络整理
导读:我有一个DataFrame,我想基于查找表填充一个新列.我不能使用map,因为查找表中的值需要很多索引. import pandas as pdimport numpy as npd = pd.DataFrame({'I': np.random.randint(3,size=5),'B0': np.random.choice([True,False],5),'B1': np.random.choice(
我有一个DataFrame,我想基于查找表填充一个新列.我不能使用map,因为查找表中的值需要很多索引.
import pandas as pd import numpy as np d = pd.DataFrame({'I': np.random.randint(3,size=5),'B0': np.random.choice([True,False],5),'B1': np.random.choice([True,5)}) 这是我的数据(实际上我的数据要大得多): B0 B1 I 0 True False 0 1 False False 0 2 False False 1 3 True False 1 4 False True 2 那我的查找表: l = pd.DataFrame({(True,True): [1.1,2.2,3.3],(True,False): [1.3,2.1,3.1],(False,True): [1.2,False): [1.1,2.0,5.1]} ) l.index.name = 'I' l.columns.names = 'B0','B1' l = l.stack(['B0','B1']) 是的 I B0 B1 0 False False 1.1 True 1.2 True False 1.3 True 1.1 1 False False 2.0 True 2.1 True False 2.1 True 2.2 2 False False 5.1 True 3.1 True False 3.1 True 3.3 所以我想从我的数据中添加一列w,查询值(I,B0,B1)的循环表.我正在使用申请: d['w'] = d.apply(lambda x: l[x['I'],x['B0'],x['B1']],axis=1) 它有效: B0 B1 I w 0 True False 0 1.3 1 False False 0 1.1 2 False False 1 2.0 3 True False 1 2.1 4 False True 2 3.1 问题是它非常慢.如何加快这个? 解决方法
这应该更快
find_these = list(zip(d.I,d.B0,d.B1)) d.assign(w=l.loc[find_these].values) B0 B1 I w 0 True False 0 1.3 1 False False 0 1.1 2 False False 1 2.0 3 True False 1 2.1 4 False True 2 3.1 加入 d.join(l.rename('w'),on=['I','B0','B1']) B0 B1 I w 0 True False 0 1.3 1 False False 0 1.1 2 False False 1 2.0 3 True False 1 2.1 4 False True 2 3.1 定时 %%timeit find_these = list(zip(d.I,d.B1)) d.assign(w=l.loc[find_these].values) 100 loops,best of 3: 1.98 ms per loop %timeit d.assign(w=d.apply(lambda x: l[x['I'],axis=1)) 100 loops,best of 3: 11.8 ms per loop %timeit d.join(l.rename('w'),'B1']) 100 loops,best of 3: 1.99 ms per loop %timeit d.merge(l.reset_index()) 100 loops,best of 3: 2.89 ms per loop (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |