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

Pandas实现获取每行最大日期的最后出现列名(同值取后列)

解决DataFrame中取最大日期对应最后一列的问题

给定如下结构的DataFrame df:

IdStage1Stage2Stage3
12022-02-012020-04-032022-06-07
22023-06-072020-03-012020-09-03
32023-02-042023-06-072022-06-07
42022-05-082023-09-012023-09-01

需求是为每个Id找到最大日期对应的Stage列,当多个Stage列日期相同时,取最后出现的列(如Id4需返回Stage3而非Stage2)。默认的df.filter(like="Stage").idxmax(axis=1)会返回第一个出现最大值的列,无法满足需求,可通过以下两种方法实现:

方法一:反转列顺序后使用idxmax

核心思路是反转Stage列的顺序,让原本靠后的列优先被idxmax检测,这样相同最大值会返回反转后的第一个列(即原顺序的最后一列):

import pandas as pd

# 确保日期列为datetime类型(若原数据是字符串格式)
df[['Stage1', 'Stage2', 'Stage3']] = df[['Stage1', 'Stage2', 'Stage3']].apply(pd.to_datetime)

# 获取所有Stage列并反转顺序
stage_cols = df.filter(like='Stage').columns
reversed_stage_cols = stage_cols[::-1]

# 计算每行最大日期对应的Stage列
df['MaxStage'] = df[reversed_stage_cols].idxmax(axis=1)

方法二:逐行筛选最大日期的最后一列

通过自定义函数逐行处理,找到所有等于最大日期的列后取最后一个:

import pandas as pd

# 转换日期列类型
df[['Stage1', 'Stage2', 'Stage3']] = df[['Stage1', 'Stage2', 'Stage3']].apply(pd.to_datetime)

stage_cols = df.filter(like='Stage').columns

def get_last_max_stage(row):
    max_date = row[stage_cols].max()
    # 筛选出所有等于最大日期的列,取最后一个
    max_cols = row[stage_cols][row[stage_cols] == max_date].index
    return max_cols[-1]

df['MaxStage'] = df.apply(get_last_max_stage, axis=1)

两种方法最终都会生成符合预期的MaxStage列:

IdMaxStage
1Stage3
2Stage1
3Stage2
4Stage3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:25:22