Pandas如何基于多条件(含日期偏移)为DataFrame新增备注列
Pandas 多条件新增备注列实现方案
前置依赖
确保已安装pandas,如果需要用到更简洁的条件分支写法可额外导入numpy。
实现代码
假设你的日期列名称为date,可根据实际字段名调整:
import pandas as pd from datetime import timedelta # 1. 日期格式预处理:确保日期列转为标准datetime格式,去掉时分秒避免计算误差 df["date"] = pd.to_datetime(df["date"]).dt.normalize() # 取当日基准值(同样去除时分秒) today = pd.Timestamp.today().normalize() # 2. 初始化备注列为空字符串 df["备注"] = "" # 3. 生成基础条件掩码:同时满足Spend为Y、Ccy为Mgd Ccy base_condition = (df["Spend"] == "Y") & (df["Ccy"] == "Mgd Ccy") # 4. 按日期偏移量赋值对应备注 # 当日+1天赋值Note 1 df.loc[base_condition & (df["date"] == today + timedelta(days=1)), "备注"] = "Note 1" # 当日+2天赋值Note 2 df.loc[base_condition & (df["date"] == today + timedelta(days=2)), "备注"] = "Note 2"
可选简化写法(使用numpy.where)
如果偏好链式写法可以用嵌套np.where实现:
import numpy as np df["备注"] = np.where( base_condition & (df["date"] == today + timedelta(days=1)), "Note 1", np.where(base_condition & (df["date"] == today + timedelta(days=2)), "Note 2", "") )
注意事项
- 如果日期字段有时区属性,需先将
today和日期列统一为相同时区再做判断,避免匹配失败 - 如果需要按工作日偏移(跳过周末/法定节假日),可将
timedelta(days=N)替换为pd.tseries.offsets.BDay(N) - 如果你的日期列存储的是字符串格式且有特殊格式,可在
pd.to_datetime中传入format参数指定格式,提升转换效率
内容的提问来源于stack exchange,提问作者BrianTheMoose
相关产品推荐
相关产品推荐

