您好,我想根据duration
和date_start
计算出一个新功能date_end
。如果合同尚未结束,我将使用今天进行计算。我的问题是我的for循环已经运行了1个小时,我只有20万行。
我的代码有什么问题(也许)?还有另一种方法可以使此操作更简单吗?
dftopyear['duration'] = ''
for x in dftopyear.Date_resil:
if x == pd.isnull(np.datetime64('NaT')): # this mean contract not yet ended
dftopyear['duration'] = dt.datetime.today().strftime("%Y-%m-%d") - dftopyear['date_start']
else: # this mean contact ended
dftopyear['duration'] = dftopyear['Date_end'] - dftopyear['date_start']
答案 0 :(得分:1)
这里有一个主要问题,当您执行减dftopyear ['date_start']时,它对整个DataFrame都进行减。
您需要一个索引定位器来指向单个值,而不是整个序列:
dftopyear['duration'] = ''
for i,x in enumerate(dftopyear.Date_resil):
if pd.isnull(x):
dftopyear.iloc[i, 'duration'] = dt.datetime.today().strftime("%Y-%m-%d") - dftopyear.iloc[i, 'date_start']
else:
dftopyear.iloc[i, 'duration'] = dftopyear.iloc[i, 'Date_end'] - dftopyear.iloc[i, 'date_start']
或更Python化的方式:
dftopyear['duration'] = ''
for i,x in enumerate(dftopyear.Date_resil):
end_day = dt.datetime.today().strftime("%Y-%m-%d") if pd.isnull(x) else dftopyear.iloc[i, 'Date_end']
dftopyear.iloc[i, 'duration'] = end_day - dftopyear.iloc[i, 'date_start']