假设我有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中有什么相同的东西吗?
谢谢!
答案 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个月