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

Python Pandas:动态获取最新日期列值,计算‘Bps away from 1Y Min’列

动态获取最新日期列计算DataFrame新列

原始数据

行业4/1/20225/1/20226/1/20221Y Min
A10051205
B18200909
C02091202

需求

新增列Bps away from 1Y Min,计算逻辑为:最新日期列的值 - 1Y Min列的值,要求最新日期列能动态识别,当新增日期列时自动更新。

期望输出

行业4/1/20225/1/20226/1/20221Y MinBps away from 1Y Min
A100512057
B182009090
C0209120210

用户尝试的错误代码

def dt_helper(dt_string):
    try:
        return datetime.datetime.strptime(dt_string, '%m/%d/%Y').date()
    except:
        return datetime.date(1900,1,1)

df['Bps away from 1Y Min'] = df[max(df.columns, key=dt_helper)] - df('1Y Min')

问题分析与修正代码

核心问题

原代码存在两个关键问题:

  1. 语法错误:访问DataFrame列必须使用方括号[],而非圆括号(),正确写法为df['1Y Min']。
  2. (可选)非日期列可能潜在干扰最新日期的判断,更严谨的方式是先筛选出日期列再进行判断。

修正后的简洁代码

import datetime

def dt_helper(dt_string):
    try:
        return datetime.datetime.strptime(dt_string, '%m/%d/%Y').date()
    except:
        # 非日期列返回极小日期,确保不会被选为最新列
        return datetime.date(1900, 1, 1)

# 获取最新日期列
latest_date_col = max(df.columns, key=dt_helper)
# 计算新列
df['Bps away from 1Y Min'] = df[latest_date_col] - df['1Y Min']

更严谨的写法(推荐)

先筛选出所有符合日期格式的列,再从中定位最新日期列,彻底避免非日期列的干扰:

import datetime

# 筛选所有符合日期格式的列
date_columns = []
for col in df.columns:
    try:
        datetime.datetime.strptime(col, '%m/%d/%Y').date()
        date_columns.append(col)
    except ValueError:
        pass

# 获取最新日期列
latest_date_col = max(date_columns, key=lambda x: datetime.datetime.strptime(x, '%m/%d/%Y').date())
# 计算新列
df['Bps away from 1Y Min'] = df[latest_date_col] - df['1Y Min']

额外注意事项

如果仍出现选取最早日期的情况,需检查日期格式字符串是否与列名的日期格式完全匹配,比如若列名是dd/mm/yyyy格式,需将%m/%d/%Y改为%d/%m/%Y。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:20:36