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

如何基于pandas多列的最小日期创建新列?

解决方法

步骤1:转换日期列为datetime类型

原始数据中的日期以字符串格式存储,首先需要将Event1、Event2、Event3三列转换为pandas的datetime类型,这样才能正确比较日期的先后顺序。使用pd.to_datetime()并设置errors='coerce',可以把无效值(比如原数据中的空值)转为pandas的NaT(时间类型的空值),方便后续处理。

步骤2:按行计算最小日期

调用min(axis=1)方法对每行的三个日期列取最小值,全空的行会自动返回NaT,后续可根据需求转为NaN或保持原格式。

完整代码示例

import pandas as pd

# 构造示例数据
data = {
    'Event1': ['7/27/2014', '3/5/2016', '5/13/2017', None, None, None],
    'Event2': [None, None, '5/10/2013', None, '5/12/2013', None],
    'Event3': [None, '2/1/2013', None, '4/28/2014', '3/6/2016', None]
}
df = pd.DataFrame(data)

# 转换为datetime类型
df[['Event1', 'Event2', 'Event3']] = df[['Event1', 'Event2', 'Event3']].apply(pd.to_datetime, errors='coerce')

# 生成最小日期列
df['Min_Date'] = df[['Event1', 'Event2', 'Event3']].min(axis=1)

# 可选:将NaT转为和原数据一致的空值格式
# df['Min_Date'] = df['Min_Date'].astype('object').where(df['Min_Date'].notna(), None)

print(df)

输出结果

Event1     Event2     Event3   Min_Date
0 2014-07-27        NaT        NaT 2014-07-27
1 2016-03-05        NaT 2013-02-01 2013-02-01
2 2017-05-13 2013-05-10        NaT 2013-05-10
3        NaT        NaT 2014-04-28 2014-04-28
4        NaT 2013-05-12 2016-03-06 2013-05-12
5        NaT        NaT        NaT        NaT

如果需要让Min_Date列的格式和原始数据的日期字符串一致,可添加以下代码将datetime转为指定格式的字符串:

df['Min_Date'] = df['Min_Date'].dt.strftime('%m/%d/%Y').where(df['Min_Date'].notna(), None)

转换后输出:

Event1     Event2     Event3    Min_Date
0 2014-07-27        NaT        NaT  07/27/2014
1 2016-03-05        NaT 2013-02-01  02/01/2013
2 2017-05-13 2013-05-10        NaT  05/10/2013
3        NaT        NaT 2014-04-28  04/28/2014
4        NaT 2013-05-12 2016-03-06  05/12/2013
5        NaT        NaT        NaT        None

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:35:26