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

如何基于多列datetime值生成记录最新日期列名的新列?

问题:基于多列日期时间值生成对应列名的新列

我需要基于first_test、second_test、third_test这三列日期时间数据,创建一个新列max_test,每行取这三列里最新的日期(最大值)对应的列名填进去。

现有数据

emp_id    first_test         second_test               third_test
a123                  2023-01-19 12:31:00-06:00  2023-02-09 12:31:00-06:00
a321                  2023-02-09 11:43:00-04:30 
a543 
a211 2023-02-18 11:43:00-04:30 
a134 2023-04-23 16:33:00-03:40                   2023-01-09 11:43:00-04:30

预期输出

emp_id   first_test         second_test               third_test               max_test
a123                  2023-01-19 12:31:00-06:00  2023-02-09 12:31:00-06:00  third_test
a321                  2023-02-09 11:43:00-04:30                            second_test  
a543      
a211 2023-02-18 11:43:00-04:30                                              first_test       
a134 2023-04-23 16:33:00-03:40                   2023-01-09 11:43:00-04:30  first_test

我尝试用for循环实现,但处理空值时总是出错,目前写的代码片段如下:

for i in range(len(test)):
    first_date = test['first_test'][i]
    second_test_date = test['second_test'][i]
    third_test = test['third_test'][i]
    if second_test > third_test:

请问有没有可行的实现方法?


解决方案

用Pandas内置的idxmax方法可以高效处理这个需求,同时自动跳过空值,不用手动写循环判断:

步骤1:转换日期列类型

首先确保三列是datetime类型,把空值转为NaT(时间类型的空值):

import pandas as pd

# 将目标列转换为带时区的datetime类型,无法转换的空值转为NaT
test[['first_test', 'second_test', 'third_test']] = test[['first_test', 'second_test', 'third_test']].apply(
    pd.to_datetime, errors='coerce', utc=True
)

步骤2:生成max_test列

使用idxmax(axis=1)按行找出最大值对应的列名,skipna=True自动忽略空值:

# 按行取最大值对应的列名,全空的行返回NaN
test['max_test'] = test[['first_test', 'second_test', 'third_test']].idxmax(axis=1, skipna=True)

说明

  • pd.to_datetime的errors='coerce'参数会把无效的日期值(比如空字符串)转为NaT,避免后续比较出错;utc=True统一时区,确保跨时区的日期能正确比较。
  • idxmax(axis=1)会遍历每行的三个日期列,找出值最大的那个列的名称,空值会被自动跳过。如果某一行所有列都是空值,max_test会显示NaN,和预期输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:12:40