Pandas对比两列条件更新DataFrame日期列的实现方法
Pandas按多条件更新日期列实现方法
操作前先确认两个核心前提:
- 日期列必须转换为
datetime64类型,否则无法直接做日期偏移计算 - 字符串匹配注意大小写差异,若数据存在大小写不统一的情况,可先对字符串列做统一大小写处理,避免匹配遗漏
示例数据初始化
import pandas as pd import numpy as np # 构造示例数据集 df = pd.DataFrame({ "Col A": [5,7,4,3], "ColB": ["Internal", "external", "external", "external"], "colc": ["1-1-2022", "1-1-2022", "1-1-2022", "1-1-2022"] }) # 将日期列转为标准datetime格式,指定格式避免解析错误 df["colc"] = pd.to_datetime(df["colc"], format="%m-%d-%Y")
按规则批量更新日期
使用np.select做向量化条件判断,相比逐行循环性能更高,适配大数据量场景:
# 按优先级定义判断条件(Internal规则优先级最高,放在最前) conditions = [ df["ColB"] == "Internal", (df["ColB"] == "external") & (df["Col A"] < 8), (df["ColB"] == "external") & (df["Col A"] >= 8) ] # 定义每个条件对应的叠加天数 offset_days = [120, 7, 30] # 计算偏移后的日期,未命中任何条件的行默认叠加0天 df["colc"] = df["colc"] + pd.to_timedelta( np.select(conditions, offset_days, default=0), unit="D" )
处理结果
运行后输出的数据集如下:
Col A ColB colc 0 5 Internal 2022-05-01 1 7 external 2022-01-08 2 4 external 2022-01-08 3 3 external 2022-01-08
注:如果你的数据中
ColB列的外部类型取值为首字母大写的External,直接修改条件里的匹配字符串即可;也可以提前执行df["ColB"] = df["ColB"].str.lower()将所有字符串统一转小写后再做匹配,避免大小写导致的匹配失败。
内容的提问来源于stack exchange,提问作者Rahul Rakshit
相关产品推荐
相关产品推荐

