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

Python pandas DataFrame如何根据行条件匹配符合要求的日期列名

实现方案

核心逻辑说明

所有计算先过滤掉排名为0的无效值,仅基于1-100之间的有效值处理:

  • 对应需求1:按日期从早到晚(列从左到右)取第一个有效值对应的日期,作为first_date_rank
  • 对应需求2:按日期从晚到早(列从右到左)取第一个有效值对应的日期,作为last_date_rank
  • 对应需求3:取所有有效值的最小值为最优排名best_rank,该排名第一次出现的日期为best_latest_date_rank

完整可运行代码

import pandas as pd

# 构造示例数据
d = {'ID': ["id1","id2"], '26-01-2021': [0, 15],'01-02-2021': [12, 17],'01-03-2021': [58, 17]}
df = pd.DataFrame(data=d)
date_cols = df.columns.drop('ID').tolist()

def process_row(row):
    date_vals = row[date_cols]
    # 过滤无效0值,保留(日期, 排名)的有序对,顺序和列顺序一致(从早到晚)
    valid_items = [(dt, val) for dt, val in zip(date_cols, date_vals) if val != 0]
    # 计算第一个有效日期
    first_date = valid_items[0][0]
    # 计算最后一个有效日期
    last_date = valid_items[-1][0]
    # 计算最优排名和对应首次出现日期
    best_rank = min([item[1] for item in valid_items])
    best_date = next(item[0] for item in valid_items if item[1] == best_rank)
    return pd.Series([first_date, last_date, best_date, best_rank])

# 新增结果列
df[['first_date_rank', 'last_date_rank', 'best_latest_date_rank', 'best_rank']] = df.apply(process_row, axis=1)
print(df)

输出验证

ID  26-01-2021  01-02-2021  ... best_latest_date_rank best_rank
0  id1           0          12  ...            01-02-2021        12
1  id2          15          17  ...            26-01-2021        15
[2 rows x 8 columns]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 02:45:03