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

Python中如何计算日期类型列的月份差值?

Pandas计算两列日期的月份差值解决方案

你遇到的错误是因为pd.Timedelta不支持month作为单位——月份的长度不固定(28-31天),无法用固定时长表示。以下是几种可行的计算方式:

方法1:通过年月直接计算(整数月份差,忽略天数)

直接提取日期的年份和月份,计算差值总和:

import pandas as pd
    
data = {
    'id_number': ['000001000', '000009795', '000011722'],
    'first_date': ['2022-01-08 13:41:00', '2022-11-07 09:16:00', '2022-02-15 12:46:00'],
    'last_date': ['2023-06-13 16:33:00', '2022-11-30 12:59:00', '2022-06-21 11:42:00']
}
df_test = pd.DataFrame(data)

df_test['first_date'] = pd.to_datetime(df_test['first_date'])
df_test['last_date'] = pd.to_datetime(df_test['last_date'])

# 计算月份差值
df_test['months_difference'] = (df_test['last_date'].dt.year - df_test['first_date'].dt.year)*12 + \
                              (df_test['last_date'].dt.month - df_test['first_date'].dt.month)

print(df_test)

这种方式只看年月,比如2022-01-08到2022-02-01会被算作1个月。

方法2:使用Period类型计算

将日期转为月份周期(Period)后直接相减,结果与方法1一致:

# 转为月份周期后相减,再提取数值
df_test['months_difference'] = (df_test['last_date'].dt.to_period('M') - df_test['first_date'].dt.to_period('M')).dt.n

方法3:考虑实际天数的月份差(需依赖dateutil)

如果需要严格按照“满N个月”计算(比如2022-01-08到2022-02-07不算1个月,到2022-02-08才算),可以使用dateutil的relativedelta:

from dateutil.relativedelta import relativedelta

def get_month_diff(row):
    delta = relativedelta(row['last_date'], row['first_date'])
    return delta.years * 12 + delta.months

df_test['months_difference'] = df_test.apply(get_month_diff, axis=1)

注意:使用前需要先安装依赖包:pip install python-dateutil

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:37:32