如何按日值阈值调整Pandas数据框中日期列的日期?
按条件调整DataFrame日期至月末
问题场景
现有包含日期列的DataFrame:
dates 0 2017-09-19 1 2017-08-28 2 2017-07-13
需要按以下规则调整日期:
- 日期日部分小于15时,改为上月月末
- 日期日部分大于等于15时,改为当月月末
期望输出:
dates 0 2017-09-30 1 2017-08-31 2 2017-06-30
解决方案(Pandas实现)
利用Pandas的日期偏移工具可高效完成需求,代码如下:
import pandas as pd from pandas.tseries.offsets import MonthEnd # 构造示例数据 df = pd.DataFrame({'dates': ['2017-09-19', '2017-08-28', '2017-07-13']}) # 将字符串日期转为datetime类型(必须步骤) df['dates'] = pd.to_datetime(df['dates']) # 按条件调整日期 df['dates'] = df['dates'].apply( lambda x: (x - pd.DateOffset(months=1)) + MonthEnd(0) if x.day < 15 else x + MonthEnd(0) ) # 查看结果 print(df)
代码说明
- 类型转换:先用
pd.to_datetime将字符串列转为datetime格式,这是日期处理的基础 - 条件判断与日期偏移:
- 当日期的日部分小于15时,先通过
pd.DateOffset(months=1)减去一个月,再用MonthEnd(0)获取该月的最后一天 - 当日期的日部分大于等于15时,直接用
MonthEnd(0)获取当月最后一天
- 当日期的日部分小于15时,先通过
内容的提问来源于stack exchange,提问作者The Dodo
相关产品推荐
相关产品推荐

