从熊猫中的两个特征计算日期特征

时间:2020-01-31 14:31:43

标签: python pandas datetime for-loop

您好,我想根据durationdate_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']

1 个答案:

答案 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']