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

如何在Polars 0.17.11中基于日期将df1与df2合并为df3

基于Polars 0.17.11实现df1与df2按date合并得到df3

需求说明

给定Polars定义的df1、df2、df3,需通过date列将df1和df2合并得到df3,缺失日期对应的字段值默认设为None,需使用Polars 0.17.11版本实现。

实现代码

import polars as pl

# 定义原始DataFrame
df1 = pl.DataFrame(
    {
        'type': ['A', 'A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'],
        'date': ['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-01', '2022-01-02', '2022-01-01', '2022-01-02', '2022-01-03'],
        'value': [1, 3, 5, 7, 8, 9, 12, 0, 1]
    }
)

df2 = pl.DataFrame(
    {
        'type': ['β', 'β', 'β'],
        'date': ['2022-01-01', '2022-01-02', '2022-01-03'],
        'value': [100, 233, 666]
    }
)

# 重命名df2列名,避免与df1列冲突
df2_renamed = df2.rename({'type': 'type_β', 'value': 'value_β'})

# 左连接保留df1所有行,缺失匹配的value_β自动设为None
df3 = df1.join(df2_renamed, on='date', how='left')

# 填充type_β的空值为'β',匹配df3的结构要求
df3 = df3.with_columns(pl.col('type_β').fill_null('β'))

print(df3)

关键步骤说明

  • 列重命名:将df2的type和value分别改为type_β、value_β,避免合并时列名冲突,同时对齐df3的列名。
  • 左连接:使用how='left'执行连接操作,确保df1的所有行都被保留,df2中无对应date的行,value_β会自动填充为None。
  • 空值填充:由于df2的type字段全部为'β',将type_β列的空值统一填充为'β',完全匹配df3的结构。

内容的提问来源于stack exchange,提问作者Young Eddie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:57:50