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

如何在Pandas多列日期中按行求最值并忽略NaN值?

Pandas按行计算日期字段的最小/最大值(忽略NaN)

我有一个包含5个日期字段的Pandas DataFrame,部分行的日期字段可能全有值,也可能仅含1个有效值。需要按行计算这些日期的最小值或最大值,同时忽略NaN值。不想写函数处理所有非NaN组合,因为效率太低。

示例DataFrame:

AccountID    CreatdDate    ContactDate     GiftDate     Sign-up Date
1            5/7/2017      nan             1/1/2018     5/7/2017
2            2/6/2020      2/6/2020        2/6/2020     2/6/2020
3            8/29/2010     4/22/2022       4/22/2022    8/4/2022
4            11/25/2017    nan             nan          nan
5            4/2/2014      1/6/2012        4/2/2014     nan

期望生成的新列:

AccountID    Date
1            5/7/2017
2            2/6/2020
3            8/29/2010
4            11/25/2017
5            1/6/2012

解决方案

1. 转换日期列为datetime类型

原始日期是字符串格式,必须先转为pandas的datetime类型才能正确计算:

import pandas as pd

# 假设你的DataFrame名为df,指定所有日期列
date_columns = ['CreatdDate', 'ContactDate', 'GiftDate', 'Sign-up Date']
df[date_columns] = df[date_columns].apply(pd.to_datetime, errors='coerce')

errors='coerce'会把无效日期转为NaT(pandas专属的日期空值),后续计算会自动忽略。

2. 按行计算最小/最大值

直接使用pandas的行级聚合方法,指定axis=1(按行计算)和skipna=True(忽略空值):

  • 计算最小值(对应示例需求):
df['Date'] = df[date_columns].min(axis=1, skipna=True)
  • 计算最大值:
df['Date'] = df[date_columns].max(axis=1, skipna=True)

3. 提取目标列(可选)

如果只需要AccountID和新生成的Date列,直接筛选即可:

result_df = df[['AccountID', 'Date']].copy()
# 可选:把日期转回原字符串格式(如需要)
result_df['Date'] = result_df['Date'].dt.strftime('%m/%d/%Y')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:12:03