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

如何对DataFrame中两个日期列相减计算得到月份差值

实现Pandas两日期列的月份差计算

前置处理:转换日期列格式

首先需将存储日期的两列转换为pandas的datetime类型,避免字符串运算报错:

import pandas as pd

# 示例DataFrame,替换为你自己的数据源即可
df = pd.DataFrame({
    'start_date': ['2019-05-01', '2020-02-01', '2021-11-01'],
    'end_date': ['2019-09-01', '2020-05-01', '2022-01-01']
})

# 批量转日期格式
df[['start_date', 'end_date']] = df[['start_date', 'end_date']].apply(pd.to_datetime)

计算自然月差值(匹配你的需求)

你需要的同跨度自然月计数(如2019-09-01减2019-05-01得到4),推荐以下两种稳定方案:

  • 方案1:使用Period对象相减(适配整月对齐场景,代码最简洁)
df['month_diff'] = (df['end_date'].dt.to_period('M') - df['start_date'].dt.to_period('M')).apply(lambda x: x.n)

运算后你的示例数据会直接返回4,完全符合预期。

  • 方案2:手动拼接年月差值(适配非整月对齐的自然月统计)
df['month_diff'] = (df['end_date'].dt.year - df['start_date'].dt.year) * 12 + (df['end_date'].dt.month - df['start_date'].dt.month)

逻辑为按公历年月差直接计算,结果和方案1完全一致。

其他场景补充

如果你的日期不是月初对齐,需要按实际满30天近似计算月份差,可以使用天数取整方案:

df['month_diff'] = (df['end_date'] - df['start_date']).dt.days // 30

该方案为近似值,会受当月实际天数影响,仅适合不需要严格自然月统计的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:48:01