python – 加速pandas应用或使用地图
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 加速pandas应用或使用地图,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1986字,纯文字阅读大概需要3分钟。
内容图文
我有一个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, False], 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, 2.1, 3.1],
(False, 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.B0, 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'], x['B0'], x['B1']], axis=1))
100 loops, best of 3: 11.8 ms per loop
%timeit d.join(l.rename('w'), on=['I', 'B0', '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
内容总结
以上是互联网集市为您收集整理的python – 加速pandas应用或使用地图全部内容,希望文章能够帮你解决python – 加速pandas应用或使用地图所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。