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

如何基于Date列的最大年份条件更新DataFrame的Tag字段

问题描述

现有DataFrame如下:

id             Date                   Tag
01      sep 2021 - 2023               ok
02      feb 2019 - aug 2020           ok
03      07/2022 - 11/2022             ok
04      2013-2017                     ok

需求:提取Date列中的最大年份,若该年份≤2020,则将对应行的Tag更新为Old,否则保持不变。预期结果如下:

id             Date                   Tag
01      sep 2021 - 2023               ok
02      feb 2019 - aug 2020           Old
03      07/2022 - 11/2022             ok
04      2013-2017                     Old

已尝试使用df['Dates'].dt.year.max()方法,但不清楚如何添加条件语句实现该需求。

解决方案

步骤1:提取每行的最大年份

Date列是字符串格式,无法直接用dt.year处理,需要先从字符串中提取所有4位年份数字,再取每行的最大值:

# 提取所有4位数字年份,转整数后按行取最大值
df['max_year'] = df['Date'].str.extractall(r'(\d{4})').astype(int).groupby(level=0).max()

步骤2:根据条件更新Tag列

有两种简洁的实现方式:

方法1:用numpy.where批量判断

import numpy as np
df['Tag'] = np.where(df['max_year'] <= 2020, 'Old', df['Tag'])

方法2:用pandas.loc定位更新

df.loc[df['max_year'] <= 2020, 'Tag'] = 'Old'

步骤3:清理临时列(可选)

如果不需要保留max_year列,可直接删除:

df.drop('max_year', axis=1, inplace=True)

完整可运行代码

import pandas as pd
import numpy as np

# 构造原始DataFrame
data = {
    'id': ['01', '02', '03', '04'],
    'Date': ['sep 2021 - 2023', 'feb 2019 - aug 2020', '07/2022 - 11/2022', '2013-2017'],
    'Tag': ['ok']*4
}
df = pd.DataFrame(data)

# 提取每行最大年份
df['max_year'] = df['Date'].str.extractall(r'(\d{4})').astype(int).groupby(level=0).max()

# 更新Tag列
df.loc[df['max_year'] <= 2020, 'Tag'] = 'Old'

# 删除临时列
df.drop('max_year', axis=1, inplace=True)

print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:01:06