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

如何基于DataFrame中f列的字符串模式生成对应整数型fr_date列?

pandas DataFrame新增fr_date列实现方案

实现逻辑

针对f列固定的字符串结构,拆分提取标识后按规则计算日期值,无需复杂正则匹配:

  • 年份动态计算:以系统当前年份为基准,按标识做固定偏移:
    • cy 偏移量0,直接取当前年份
    • l1y 偏移量-1,当前年份减1
    • l2y 偏移量-2,当前年份减2
  • 季度固定映射:每个季度对应固定的季度末日期,通过字典直接匹配:
    • q1 对应月末字符0331
    • q2 对应月末字符0630
    • q3 对应月末字符0930
    • q4 对应月末字符1231

可运行代码

import pandas as pd
from datetime import datetime

# 示例输入DataFrame
df = pd.DataFrame({
    "f": [
        "l2y_q1_eps_gg",
        "l2y_q2_eps_gg",
        "l2y_q3_eps_gg",
        "l2y_q4_eps_gg",
        "l1y_q1_eps_gg",
        "cy_q1_eps_gg"
    ]
})

# 定义规则映射字典
year_offset = {"cy": 0, "l1y": -1, "l2y": -2}
quarter_end_str = {"q1": "0331", "q2": "0630", "q3": "0930", "q4": "1231"}

# 动态获取基准当前年份
base_year = datetime.now().year

def get_fr_date(f_str: str) -> int:
    # 拆分f列字符串的前两个固定段(后续为统一后缀,不参与计算)
    year_flag, quarter_flag = f_str.split("_")[:2]
    # 拼接日期字符串后转为int类型
    target_date = f"{base_year + year_offset[year_flag]}{quarter_end_str[quarter_flag]}"
    return int(target_date)

# 新增fr_date列
df["fr_date"] = df["f"].apply(get_fr_date)

运行输出

代码执行后生成的结果与示例要求完全一致:

f  fr_date
0  l2y_q1_eps_gg   20190331
1  l2y_q2_eps_gg   20190630
2  l2y_q3_eps_gg   20190930
3  l2y_q4_eps_gg   20191231
4  l1y_q1_eps_gg   20200331
5    cy_q1_eps_gg   20210331

注意点

  • 由于f列字符串结构固定,拆分时仅提取前两段标识即可,无需处理后续通用后缀,运行效率更高
  • 最终fr_date列直接通过字符串拼接转int,不需要引入额外的日期处理逻辑,减少不必要的性能损耗
  • 因为代码动态读取系统当前年份做偏移,年份变化时不需要手动修改映射规则,可自动适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 08:06:03