- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用相对较大的 DataFrame
(~4M 行 x 11 列,数字 ctypes
)。
我需要进行基于groupby
的操作,尤其是transform
和aggregate
。我大约与 O(1M)
组一起工作。
在我的机器上(i7 2600k,8GB 内存,Fedora20x64),我注意到除了“内置”操作之外,几乎不可能运行任何 groupby
操作。
例如
df.groupby('key').Acol.mean()
只需要几分之一秒,而
df.groupby('key').Acol.aggregate(pd.Series.mean)
可能需要几分钟,内存消耗会激增。
通过 lambda
指定的任何其他操作,即使是根据 pd.Series
向量化编写的,所花费的时间远远超过我可以等待的时间,或者达到疯狂交换水平。
问:您有什么建议可以更接近“内置”方法的性能吗?
我能否以某种方式编写我的方法,就像编写内置函数一样? cython 有帮助吗?
当从aggregate
传递到transform
时,情况不知何故变得更糟。
因此我找不到“内置”函数(我是否遗漏了什么??)
我正在做什么来解决这个问题:
我将 df
分成几部分(以数据安全的方式),将它们存储在 hdf5
文件中,从 4 个客户端加载它们,并行操作数据,重新保存在'hdf5'
中,最后将结果合并到最终的df
中。该解决方案要么有效,要么产生客户端的极端交换。
最佳答案
这使用常量内存,并且是 O(组数)。
内置函数具有巨大的加速,原因有两个。
因此,在非平凡的计算中,您必须使用内置函数。使用 (apply/aggregate) 非常适合广义函数评估,但 pandas 不能对用户函数中发生的事情做出太多假设,而这些是在 python 空间中评估的。
In [28]: df = DataFrame(np.random.randn(4000000,11))
In [29]: df.groupby(df.index//4).ngroups
Out[29]: 1000000
In [30]: %timeit df.groupby(df.index//4).mean()
1 loops, best of 3: 412 ms per loop
In [31]: %timeit -n 1 df.groupby(df.index//4).apply(lambda x: x.mean())
1 loops, best of 3: 1min 22s per loop
传递 .aggregates(pd.Series.mean)
实际上是 .apply(lambda x: x.mean())
并招致相同的性能损失。
您应该始终尽可能使用矢量化内置函数,尤其是在有大量组的情况下。
这是一个没有内置但可以轻松实现的示例:
我想计算最大-最小值,所以天真地你应该这样做:
df.groupby(...).apply(lambda x: x.max()-x.min())
做起来更快:
g = df.groupby(...)
g.max()-g.min()
关于python - Pandas :实现组操作的 'built-in' 方法(例如均值、标准值)的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24404334/
我正在使用 Kotlin 和 Dagger 2 开发一个 Android 项目。我有一个 NetworkModule它应该提供 Retrofit 的单例实例。我在其中定义了所有这些提供程序功能。 下面
我从 util/buildscripts/build.sh 构建 dojo 并包含我的自定义模块导致层文件(示例 dojo.js)仅包含文本“//>>built”。 最佳答案 这里讨论了问题并解决了问
这个问题在这里已经有了答案: How to unhide an overriden function? (1 个回答) 关闭 9 年前。 在我的 Matlab 路径上有一个自定义的 zeros 函数
我试图找到一个内置的几何平均值,但找不到。 (显然,在 shell 中工作时,内置函数不会为我节省任何时间,我也不怀疑准确性有任何差异;对于脚本,我尝试尽可能频繁地使用内置函数,其中(累积)性能提升通
我想知道在 keycloak (KL) 中是否可以分析身份验证日志(尝试次数、错误等),如果 KL 已经提供了这样做的东西,或者我必须构建它。欢迎提出任何建议。 谢谢尼古拉 最佳答案 Keycloak
我想知道在 keycloak (KL) 中是否可以分析身份验证日志(尝试次数、错误等),如果 KL 已经提供了这样做的东西,或者我必须构建它。欢迎提出任何建议。 谢谢尼古拉 最佳答案 Keycloak
据我所知,Python builtins 指的是那些包含在__builtins__ 中的异常和函数: >>> import builtins # import __builtin__ in Pyth
我想修改currency过滤以处理输入值中的自定义货币格式。 (例如,AUD 3.00 -> $3.00)。 一种选择是从头开始编写我自己的过滤器。然而,这似乎有很多重复,鉴于现有的过滤器很棒,我只需
我正在深入研究一些 C 内部结构,我从 clang 的 stddef.h 中找到了以下行(位于 /usr/lib/llvm-11/lib/clang/11.0 .0/include/): typede
这是一个由两部分组成的部分:首先,定义一个函数,distance_from_zero,带有一个参数(选择您喜欢的任何参数名称)。 其次,让该函数执行以下操作: 检查它接收到的输入的类型。如果类型为 i
我创建了一个接受 event 的函数对象并使用 .clientX 和 .clientY 属性做一些事情。基于我传递的是整个对象,而不仅仅是我将使用的属性,是否存在任何性能问题?这个对象是通过引用传递的
我目前正在从 ECMA 学习 JavaScript Manual ,我对内置对象的概念感到困惑。我知道像Function、Object、Math这样的对象是内置对象,你可以直接使用它们,例如Math
我想对我正在构建的小型应用程序使用潜在语义分析,但我不想自己构建矩阵。 (部分是因为我拥有的文档不会成为一个很好的培训集合,因为它们有点短且异构,部分是因为我刚买了一台新计算机,我发现安装线性代数之类
我是 C++ 的初学者,所以如果答案很明显,它可能就是我正在寻找的答案。我正在阅读 this thread 中的第二个回复并感到困惑。 #include #include int main() {
我需要用字符串构建一个对象属性但是我怎么能使用这个字符串的值作为属性名呢? var x = 'a'; var y = 'b'; var xy = x + y; var z = { xy: 's
我目前正在使用 java 中的 play 框架 2.2.6 开发一个应用程序。我的系统需要区分两个用户角色:管理员和用户。 到目前为止,我知道使用 Security.Authenticator 类来防
提问界面标记了许多“可能已经有您的答案的问题”,但我已尝试进行尽职调查以检查是否有任何人在问我在这里的确切内容。如果这是重复的,我深表歉意。 假设我有以下不正确的程序: extern void und
我需要在主屏幕上有相对缓慢移动的图像(有些像动态壁纸),我想知道,就 CPU 负载而言,Android 动画类是否适合这种情况? 我担心的是 android 动画以最高帧速率不断运行,有时它会连续几个
我想知道是否可以从 java.util.stream.Collectors 扩展内置的 Java Stream 收集器类,而不是从头开始构建自定义收集器,因此复制已经在该类中实现的代码。 例如:假设我
以下是我使用 Python 3.8.1(在 macOS Mojave,10.14.6 上,作为 以及其他一些平台上的 Python 3.7(或更旧的))。我是新来的 计算,不知道如何要求改进 语言,但
我是一名优秀的程序员,十分优秀!