温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - compute date feature from two feature in pandas
datetime for-loop pandas python

python - 从 pandas 中的两个特征计算日期特征

发布于 2020-04-05 00:49:11

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

查看更多

提问者
abdoulsn
被浏览
178
Tony Yun 2020-01-31 23:11

这里有一个主要问题,当您执行减号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']