我认为这应该很简单,但我所看到的是涉及迭代数据帧日期字段以确定两个日期之间差异的技术.我遇到了麻烦.我熟悉MSSQL DATEDIFF所以我认为Pandas datetime会有类似的东西.我也许会这样,但我想念它.
是否有一种Pandonic方法可以将月数确定为两个日期(日期时间)之间的整数而无需迭代?请记住,可能有数百万行,因此性能是一个考虑因素.
日期是datetime对象,结果是这样的 - 新列是Month:
Date1           Date2         Months
2016-04-07      2017-02-01    11
2017-02-01      2017-03-05    1
ℕʘʘ*_*ḆḽḘ 44
这是一个非常简单的回答我的朋友:
df['nb_months'] = ((df.date2 - df.date1)/np.timedelta64(1, 'M'))
现在:
df['nb_months'] = df['nb_months'].astype(int)
piR*_*red 15
df.assign(
    Months=
    (df.Date2.dt.year - df.Date1.dt.year) * 12 +
    (df.Date2.dt.month - df.Date1.dt.month)
)
       Date1      Date2  Months
0 2016-04-07 2017-02-01      10
1 2017-02-01 2017-03-05       1
Paw*_*erg 12
这适用于 pandas 1.1.1:
df['Months'] = df['Date2'].dt.to_period('M').astype(int) - df['Date1'].dt.to_period('M').astype(int)
df
# Out[11]: 
#        Date1      Date2  Months
# 0 2016-04-07 2017-02-01      10
# 1 2017-02-01 2017-03-05       1
另一种可能更优雅的解决方案是
 df.Date2.dt.to_period('M') - df.Date1.dt.to_period('M'),它避免了舍入错误。
只是对 @pberkes 答案的一小部分补充。如果您希望答案为整数值而不是 pandas._libs.tslibs.offsets.MonthEnd,只需附加.n到上面的代码即可。
(pd.to_datetime('today').to_period('M') - pd.to_datetime('2020-01-01').to_period('M')).n
# [Out]:
# 7