You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何同时更新Polars DataFrame重复列并新增独有列?

更优的实现方式

你可以用with_columns替代hstack来添加新列,代码更简洁直观:

result = df1.update(df2).with_columns(df2.select(set(df2.columns) - set(df1.columns)))

如果需要严格保持列顺序(和期望结果一致:先保留df1原有列,再添加df2新列),可以写成:

new_cols = [c for c in df2.columns if c not in df1.columns]
result = df1.update(df2).with_columns(df2.select(new_cols))

为什么这更优?

  • with_columns是Polars中添加/修改列的标准方法,语义更清晰,相比hstack更贴合“添加新列到已有DataFrame”的操作意图。
  • 用集合运算set(df2.columns) - set(df1.columns)替代列表推导,代码更简洁(Python 3.9+支持集合差运算)。

另外,如果你想一步完成更新和添加列,也可以用with_columns结合coalesce处理已有列的更新逻辑(和update行为一致:仅用df2的非null值覆盖df1对应位置):

common_cols = set(df1.columns) & set(df2.columns)
new_cols = set(df2.columns) - set(df1.columns)

result = df1.with_columns(
    # 更新共有列:保留df1非null值,用df2值填充df1的null
    [pl.coalesce(pl.col(c), df2[c]).alias(c) for c in common_cols],
    # 添加df2独有的列
    df2.select(new_cols)
).select(df1.columns + list(new_cols))  # 保持列顺序与原df1一致

这种方式不需要调用update,直接通过表达式完成所有操作,逻辑更统一,也便于后续扩展修改。


内容的提问来源于stack exchange,提问作者Alena Volkova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 18:54:56