使用 lambda 在方法链中的 pandas 中分配变量的性能问题

问题描述 投票:0回答:1

在使用 pandas 数据帧时,我喜欢使用方法链,因为它使工作流程类似于 R 中的 tidyverse 方法,在其中使用一串管道。

考虑这个答案中的示例

N = 10
df = (
    pd.DataFrame({"x": np.random.random(N)})
    .assign(y=lambda d: d['x']*0.5)
    .assign(z=lambda d: d.y * 2)
    .assign(w=lambda d: d.z*0.5)
)

我想我听说使用 lambda 操作数据帧效率低下,因为它不是矢量化操作,但一些循环在幕后进行。

上面的例子有问题吗?是否有在方法链中使用 lambda 并保留类似 tidyverse 方法的替代方案?

python r pandas methods tidyverse
1个回答
0
投票

您可以使用单个

assign
调用,这将避免为每个步骤生成中间 DataFrame:

df = (pd.DataFrame({'x': np.random.random(N)})
        .assign(y=lambda d: d['x'] * 0.5,
                z=lambda d: d.y * 2,
                w=lambda d: d.z * 0.5,
               )
     )

性能显着提升:

pandas single vs multiple assign calls

© www.soinside.com 2019 - 2024. All rights reserved.