python - 为什么 Series.apply 在带有间隔的列上如此之快?
问题描述
我一直认为Series.apply
是行上的循环,我们知道 DataFrame.apply(axis=1) 有一些可怕的缩放https://stackoverflow.com/a/55557758/4333359。
但是,当尝试pandas._libs.interval.Interval
使用 dtype获得 Series of 的中点时,category
我注意到这Series.apply
似乎根本没有这样做,并且速度与类似Series.map
在下面的示例中,我尝试通过应用 lambda(应该很慢?)或做一些我认为应该非常快的事情(将 3 个间隔映射到它们的中点,仅循环 3 个唯一间隔)来获取间隔的中点.
那么发生了什么事,为什么Series.apply
这么快,或者map
只是非常慢?
import perfplot
import pandas as pd
import numpy as np
def apply_mid(s):
return s.apply(lambda x: x.mid)
def map_mid(s):
d = {x: x.mid for x in s.cat.categories}
return s.map(d)
perfplot.show(
setup=lambda n: pd.cut(pd.Series(np.random.randint(1, 100, 3*n)), 3),
kernels=[
lambda s: apply_mid(s),
lambda s: map_mid(s),
],
labels=['apply', 'map'],
n_range=[2 ** k for k in range(24)],
equality_check=np.allclose,
xlabel='~len(df)'
)
解决方案
推荐阅读
- android-studio-3.1.3 - 为什么我的 TextView 中的文本没有显示在 Android Studio 的预览中?
- image - 如何在 PDF 文件中从服务器加载图像?
- javascript - 如何使用nodejs同时创建两个目录
- testng - Maven TestNG 项目未从命令提示符执行
- java - Java 和 Microsoft Access sql 选择命令与二进制搜索
- mysql - MySQL 社区服务器是本地的还是托管的
- sql - 几乎相同值的日期比较
- pandas - 使用共享 x 轴 Pandas 在一张图表中绘制不同的时间序列数据
- header - 如何保持 HTTP/2 连接直到请求/响应会话完成?
- swift - 我的 UISearchBar 结果有什么问题?