如何在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
相关产品推荐
相关产品推荐

