如何基于DataFrame中f列的字符串模式生成对应整数型fr_date列?
pandas DataFrame新增fr_date列实现方案
实现逻辑
针对f列固定的字符串结构,拆分提取标识后按规则计算日期值,无需复杂正则匹配:
- 年份动态计算:以系统当前年份为基准,按标识做固定偏移:
cy偏移量0,直接取当前年份l1y偏移量-1,当前年份减1l2y偏移量-2,当前年份减2
- 季度固定映射:每个季度对应固定的季度末日期,通过字典直接匹配:
q1对应月末字符0331q2对应月末字符0630q3对应月末字符0930q4对应月末字符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。
相关产品推荐
相关产品推荐

