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

如何在Pandas中基于另一列给日期列添加月度增量?

问题描述

需要基于DataFrame的monthly_increment列,为date列添加对应月度增量,生成new_date列。

示例数据集

index  monthly_increment     date
0           1             2018-12-01
1           2             2018-10-01
2           3             2018-12-01
3           4             2018-01-01
4           5             2018-06-01

期望结果

index  new_date
0      2019-01-01
1      2018-12-01
2      2019-03-01
3      2018-05-01
4      2018-11-01

尝试过的方案及问题

  • 使用timedelta:不支持月度增量,无法满足需求;
  • 使用DateOffset:无法接收Series/DataFrame列,执行df['new_date'] = df['date']+ pd.DateOffset(df['monthly_increment'])时触发TypeError: n argument must be an integer, got <class 'pandas.core.series.Series'>。

希望找到无需循环或lambda函数的简便矢量化解决方案。

解决方案

可以利用pandas的PeriodIndex实现完全矢量化的月度增量计算,无需循环或lambda:

import pandas as pd

# 1. 确保date列为datetime类型(如果原始数据是字符串格式)
df['date'] = pd.to_datetime(df['date'])

# 2. 矢量化计算月度增量:转成月度周期→加增量→转回时间戳
df['new_date'] = df['date'].dt.to_period('M').add(df['monthly_increment']).dt.to_timestamp()

原理说明

  • dt.to_period('M'):将datetime类型日期转换为月度周期对象(例如2018-12-01转为2018-12),这类对象支持直接与整数进行加减操作;
  • .add(df['monthly_increment']):对每个周期对象批量加上对应的月度增量,实现批量偏移;
  • .dt.to_timestamp():将偏移后的周期对象转回datetime类型,得到最终的new_date列。

这种方法是pandas原生的矢量化操作,效率远高于循环或lambda,符合类似Spark的简洁实现需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:50:01