我正在尝试确定结束日期,并且成功了,但是代码需要很长时间才能运行。如何改善以下代码?另外df['end_date']
是新变量吗?我试过了:
df['end_date'] = []
,
并附加它,但出现长度错误。因此,我在下面写了很多谢谢,d
i = 0
j = 0
df['end_date'] = df['start_date']
for i in range(len(df['start_date'])):
for j in range(len(df['term'])):
df['end_date'] = (df['start_date'][i].date() + dt.timedelta(df['term'][j]*365/12))
i+=1
j+=1
我的数据集如下:
答案 0 :(得分:2)
假设“ end_date”是日期时间,则类似这样的方法应该起作用:
df['end_date'] = df['start_date'] + pd.to_timedelta(df['term']*365/12, unit='d')
但是,处理月份偏移量的正确方法是使用pd.DateOffset
:
# if the offset was the same for all records, it would be ok to just
# offsets = pd.DateOffset(months=the_offset)
# but here, we need to handle different values
offsets = df['term'].map(lambda term: pd.DateOffset(months=term))
df['end_date'] = df['start_date'] + offsets
答案 1 :(得分:0)
如果我正确理解了您想要实现的目标,那么您应该能够做到:
example2 :: RIO Env ()
example2 = call foo 0 "fooarg"
example3 :: RIO Env Int
example3 = call bar 3
您正在遍历数据框,应避免这样做。尝试尽可能直接使用pandas API,以使用其基础性能优化。
此外,您正在手动递增df['end_date'] = df['start_date'].date() + dt.timedelta(df['term']*365/12)
和i
,但是它们也是j
循环中的索引,因此由循环运算符递增。因此,不必手动增加它们。