在使用 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 方法的替代方案?
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,
)
)
性能显着提升: