функция вычисления даты из двух функций в pandas - PullRequest
1 голос
/ 31 января 2020

Здравствуйте! Я бы хотел вычислить новую функцию duration из date_start и date_end. Если контракт еще не закончился, я рассчитываю его, используя сегодняшнюю дату. Моя проблема в том, что прошло 1 час, поскольку l oop работает, у меня только 200K строк. Что не так (возможно) с моим кодом? Есть ли другой способ сделать это более простым?

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 Ответ

1 голос
/ 31 января 2020

Здесь есть серьезная проблема: когда вы делаете минус 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']

или более pythoni c way:

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']
...