Pandas datetime列如何基于给定日期计算下月最后一天
解决方案
你可以结合pandas内置的月末偏移量MonthEnd实现需求,同时建议使用矢量化操作替代apply,大幅提升大表的运行效率。
方案1:矢量化写法(推荐)
无需逐行遍历,效率更高:
import pandas as pd # 先对日期列加1个月,再取对应月份的最后一天 my_table['REPORTING_DT_python'] = my_table['BDX_DT'] + pd.DateOffset(months=1) + pd.offsets.MonthEnd(0)
说明:MonthEnd(0)表示取当前日期所在月份的最后一天,不会额外偏移月份
方案2:保留自定义函数的写法
如果你的场景必须使用自定义函数封装,可修改为如下逻辑:
def inc_date(bdx_dt): dt = pd.Timestamp(bdx_dt) + pd.DateOffset(months=1) return dt + pd.offsets.MonthEnd(0) my_table['REPORTING_DT_python'] = my_table.apply(lambda row:inc_date(row['BDX_DT']), axis=1)
效果验证
输入日期为2020-11-30时,加1个月得到2020-12-30,再经过MonthEnd(0)偏移后就会得到预期的2020-12-31,所有月份的边界情况都能正常适配。
内容的提问来源于stack exchange,提问作者PKV
相关产品推荐
相关产品推荐

