如何对Pandas datetime64类型列计算两个月前的月初日期
解决pandas日期列生成两月前月初的方法
timedelta本身不支持月份级别的时间偏移(每月天数不固定),relativedelta直接作用于Series会存在兼容性问题,用pandas原生的时间偏移方法即可实现需求。
实现步骤
- 导入pandas内置的
DateOffset处理月份偏移 - 对
col1做两个月的偏移后,取当月第一天即可
完整代码示例
import pandas as pd from pandas.tseries.offsets import DateOffset # 假设你的原始DataFrame为df # 先做两个月时间偏移,再取对应月份的第一天 df['col2'] = (df['col1'] - DateOffset(months=2)).dt.to_period('M').dt.to_timestamp() # 如果需要col2输出为yyyy-dd-mm格式的字符串,可以追加格式转换逻辑 df['col2'] = df['col2'].dt.strftime('%Y-%d-%m')
效果验证
拿你给出的示例测试:col1值为2021-01-07(按yyyy-dd-mm规则解析为2021年7月1日),运算后得到的col2字符串格式为2021-01-05,和预期结果一致。
注意事项
- 如果你的
col1还未转为datetime类型,需要先执行df['col1'] = pd.to_datetime(df['col1'], format='%Y-%d-%m')完成类型转换 - 该方法是pandas原生向量化运算,效率远高于用
apply调用relativedelta的实现
内容的提问来源于stack exchange,提问作者sayan sen
相关产品推荐
相关产品推荐

