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

Polars:按datetime类型批量生成带后缀的新列方法

Polars批量为Datetime列生成带后缀的年份新列(保留原列)

要实现对任意数量的datetime列批量生成带指定后缀的年份列,同时保留原列,可以利用Polars的动态列选择和别名函数来搞定,不用手动处理每一列。

核心实现思路

用pl.col(pl.DATETIME_DTYPES)选中所有datetime/date类型的列,通过.year()提取年份,再用动态别名函数给新列加上指定后缀(比如_year),最后用with_columns或select把新列追加到原DataFrame中,原列完全保留。

代码示例

import polars as pl

# 构造测试数据(模拟已完成字符串转datetime的情况)
df = pl.DataFrame({
    "order_date": ["2023-01-15", "2024-05-20"],
    "signup_date": ["2022-09-01", "2021-11-30"]
}).with_columns(
    pl.col(["order_date", "signup_date"]).str.to_date()
)

# 批量生成带_year后缀的年份列,保留原列
df = df.with_columns(
    pl.col(pl.DATETIME_DTYPES).year().alias(lambda col_name: f"{col_name}_year")
)

print(df)

运行后输出:

shape: (2, 4)
┌────────────┬─────────────┬─────────────────┬──────────────────┐
│ order_date ┆ signup_date ┆ order_date_year ┆ signup_date_year │
│ ---        ┆ ---         ┆ ---             ┆ ---              │
│ date       ┆ date        ┆ i32             ┆ i32              │
╞════════════╪═════════════╪═════════════════╪══════════════════╡
│ 2023-01-15 ┆ 2022-09-01  ┆ 2023            ┆ 2022             │
│ 2024-05-20 ┆ 2021-11-30  ┆ 2024            ┆ 2021             │
└────────────┴─────────────┴─────────────────┴──────────────────┘

自定义后缀

如果需要换成其他后缀(比如_yr),只需要修改别名函数里的拼接逻辑:

df = df.with_columns(
    pl.col(pl.DATETIME_DTYPES).year().alias(lambda col_name: f"{col_name}_yr")
)

另一种方式:用select保留原列

你也可以用select实现,记得加上pl.all()来保留所有原列:

df = df.select(
    pl.all(),
    pl.col(pl.DATETIME_DTYPES).year().alias(lambda c: f"{c}_year")
)

两种方式效果完全一致,选你顺手的就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:23:25