Pandas 日期之间的月数差异

hr0*_*r02 0 python date dataframe pandas

我有一个具有以下值的数据框日期列

2015-01-01
2015-02-01
2015-03-01
2015-07-01
2015-08-01
2015-10-01
2015-11-01
2016-02-01
Run Code Online (Sandbox Code Playgroud)

我想在几个月内找到这些值的差异,如下所示

  date_dt       diff_mnts
2015-01-01        0
2015-02-01        1
2015-03-01        1
2015-07-01        4 
2015-08-01        1
2015-10-01        2
2015-11-01        1
2016-02-01        3
Run Code Online (Sandbox Code Playgroud)

我尝试使用该diff()方法计算天数,然后转换为 astype('timedelta64(M)'). 但在这些情况下,当天数小于 30 时 - 它显示月份差异值为 0。请告诉我,如果有任何简单的内置函数,我可以在这种情况下尝试。

cs9*_*s95 5

选项 1
更改期间并调用diff

df    
        Date
0 2015-01-01
1 2015-02-01
2 2015-03-01
3 2015-07-01
4 2015-08-01
5 2015-10-01
6 2015-11-01
7 2016-02-01

df.Date.dtype
dtype('<M8[ns]')
Run Code Online (Sandbox Code Playgroud)
df.Date.dt.to_period('M').diff().fillna(0)

0    0
1    1
2    1
3    4
4    1
5    2
6    1
7    3
Name: Date, dtype: int64
Run Code Online (Sandbox Code Playgroud)

方案2
或者,叫diffdt.month,但你需要考虑了一年多的差距(解决方案改善感谢@galaxyan!) -

i = df.Date.dt.year.diff() * 12 
j = df.Date.dt.month.diff()

(i + j).fillna(0).astype(int)

0    0
1    1
2    1
3    4
4    1
5    2
6    1
7    3
Name: Date, dtype: int64
Run Code Online (Sandbox Code Playgroud)

警告(感谢您发现它)是这对一年以上的差距不起作用。