计算与时间戳相关的月份差异

时间:2014-06-19 17:35:37

标签: python datetime numpy pandas

假设我有2个时间戳

a=Timestamp('1986-03-31 00:00:00', tz=None)
b=Timestamp('1986-04-18 00:00:00', tz=None)

现在,如果我只是采取差异b-a,我会得到datetime.timedelta(18)

如何获得月份的差异,即1。无论他们之间有多少实际日子,我都需要month中的差异。有一个函数SAS正是我所需要的,intck('month',a,b)=1。在python或pandas / numpy中有什么相同的东西吗?

谢谢!

4 个答案:

答案 0 :(得分:3)

我会将这些转换为pandas Periods而不是Timestamps,然后将这些转换为

>>> a=Timestamp('1986-03-31 00:00:00', tz=None).to_period(freq='M')
>>> b=Timestamp('1986-04-18 00:00:00', tz=None).to_period(freq='M')
>>> b-a
1L

答案 1 :(得分:1)

如果日期实际上是日期时间对象,请尝试:

b.month - a.month + (b.year - a.year)*12

您需要分别考虑这些年份。

答案 2 :(得分:0)

如果他们不是日期时间对象:

t0 = '1986-03-31 00:00:00'
t1 = '1987-12-31 00:00:00'

month0 = int(t0.split("-")[1])
month1 = int(t1.split("-")[1])

year0 = int(t0.split("-")[0])
year1 = int(t1.split("-")[0])

monthdif = (year1-year0)*12 + (month1 - month0)

答案 3 :(得分:0)

我正在使用它:

import pandas as pd

a = pd.to_datetime('1986-03-31 00:00:00', format='%Y-%m-%d %H:%M:%S')
b = pd.to_datetime('1986-04-18 00:00:00', format='%Y-%m-%d %H:%M:%S')

mdiff = lambda x,y: 12*(x.year-y.year) + (x.month-y.month)

print("Difference between {} and {} is: {} months".format(b,a,mdiff(b,a)))

1986-04-18 00:00:00和1986-03-31 00:00:00之间的差异是:1个月