首页 > 解决方案 > 如何从数据框的多列中获取最近的日期?

问题描述

我需要两个col第一个显示最近的日期,第二个显示名称col

d = {'col1': ["id1","id2"] 'Stage 1': [26-01-2021, 04-01-2021],'Stage 2': [27-01-2021, 02-10-2025]}
df = pd.DataFrame(data=d)
df

图片参考

实际的

在此处输入图像描述

要求

在此处输入图像描述

我试过了

date=datetime.date.today()
idx = plc.index[df[['Stage 1','Stage 2']].index.get_loc(date, 
    method='nearest')]

标签: pythondataframedatetime

解决方案


将日期转换为日期时间后,您可以将其传递给一个函数,该函数一次填充两个新列:

import pandas 
import datetime
d = {'col1': ["id1","id2"], 'Stage 1': ['26-01-2021', '04-01-2021'],'Stage 2': ['27-01-2021', '02-10-2025']}
df = pd.DataFrame(data=d)

df['Stage 1'] = pd.to_datetime(df['Stage 1'], format='%d-%m-%Y')
df['Stage 2'] = pd.to_datetime(df['Stage 2'], format='%d-%m-%Y')
date=pd.to_datetime(datetime.date.today())

def get_date(row):
    date_range = row[['Stage 1', 'Stage 2']]
    closest_date_key = abs(date - date_range).argmin()
    closest_date = date_range[closest_date_key]
    column_name = date_range.keys()[closest_date_key]
    return pd.Series((closest_date, column_name))

df[['Requirement 1', 'Requirement 2']] = df.apply(lambda row:get_date(row), axis=1)

输出:

|    | col1   | Stage 1             | Stage 2             | Requirement 1       | Requirement 2   |
|---:|:-------|:--------------------|:--------------------|:--------------------|:----------------|
|  0 | id1    | 2021-01-26 00:00:00 | 2021-01-27 00:00:00 | 2021-01-27 00:00:00 | Stage 2         |
|  1 | id2    | 2021-01-04 00:00:00 | 2025-10-02 00:00:00 | 2021-01-04 00:00:00 | Stage 1         |

推荐阅读