我的数据框有两列。当我减去它们以获得介于两者之间的月份时,我得到了一些奇怪的数字。这是一个例子:
test = pd.DataFrame({'reg_date': [datetime(2017,3,1), datetime(2016,9,1)],
'leave_date':[datetime(2017,7,1), datetime(2017,6,1)]})
test['diff_month'] = test.leave_date.dt.month - test.reg_date.dt.month
test
输出:
如果用户的register_date是去年,我会得到一个负数(也是错误的)。
我应该执行哪些操作才能在两个日期时间列之间获得正确的月份时间差异?
更新:我稍微更改了一些示例,以便更多地反映我所面临的问题。不要这么快就投票。
我解决这个问题的方法是:
test['real_diff'] = test.diff_month.apply(lambda x: x if x > 0 else 12+x)
我不喜欢黑客,所以我很好奇是否还有其他办法。
答案 0 :(得分:2)
要获得结果,您可以使用relativedelta
中的dateutil
:
import datetime
from dateutil import relativedelta
a = datetime.datetime(2016, 12, 1)
b = datetime.datetime(2017, 5, 1)
relativedelta.relativedelta(b, a).months
#5
答案 1 :(得分:1)
IIUC您可以拨打apply
并使用relativedelta
作为@zipa建议:
In[29]:
from dateutil import relativedelta
test['real_diff'] = test.apply(lambda row: relativedelta.relativedelta(row['leave_date'], row['reg_date']).months, axis=1)
test
Out[29]:
leave_date reg_date real_diff
0 2017-07-01 2017-03-01 4
1 2017-06-01 2016-09-01 9