создание нового столбца путем добавления целого числа к дате и времени в датафрейме - PullRequest
0 голосов
/ 31 марта 2020

У меня есть дата, которая выглядит следующим образом:

 |Launch       |Delivery   |Step-up
0|2020-04-22   |102        |NaT
1|2020-09-02   |140        |2021-01-03
2|2019-12-24   |90         |2020-04-20
3|2020-06-14   |nan        |2022-02-18
 ...

Я хочу сделать некоторые вычисления с этими столбцами, чтобы создать новый столбец с именем зрелости.

если в поставке присутствует nan, тогда зрелость для этого ряда также должна быть nan.

если нет повышения, то срок погашения = запуск + доставка.

, если повышение действительно существует, и это <запуск + Доставка, тогда зрелость = повышение. </p>

иначе срок погашения - запуск + доставка.

поэтому в идеале датафрейм должен выглядеть следующим образом:

 |Launch       |Delivery   |Step-up      |Maturity
0|2020-04-22   |10         |NaT          |2020-05-02
1|2020-09-02   |14         |2020-09-10   |2020-09-10
2|2019-12-24   |9          |2020-01-20   |2020-01-02
3|2020-06-14   |nan        |2020-07-18   |nan
...

1 Ответ

1 голос
/ 31 марта 2020

Вам просто нужно выполнить итерацию, перебросить ваш фрейм данных, создать новый фрейм данных и объединить их.

Предварительные сведения

import pandas as pd
import datetime

data = {'Launch':['2020-04-22', '2020-09-02', '2019-12-24', '2020-06-14'],
        'Delivery':['10', '14', '9', 'nan'],
        'Step-up':['NaT', '2021-01-03', '2020-04-20', '2022-02-18']}

df = pd.DataFrame(data)

Здесь раздел, который отвечает на ваш вопрос:

# create a new dataframe
append = {'Maturity':[]}

# iterate throw all rows of the old dataframe
for index, row in df.iterrows():
    # for each row make your computation
    if row['Delivery'] == 'nan':
        # append your data to the new dataframe
        append['Maturity'].append('nan')
    elif row['Step-up'] == 'NaT':
        append['Maturity'].append(datetime.datetime.strptime(row['Launch'], '%Y-%m-%d') + datetime.timedelta(days=int(row['Delivery'])))
    elif row['Step-up'] != 'NaT':
        launch_plus_delivery = datetime.datetime.strptime(row['Launch'], '%Y-%m-%d') + datetime.timedelta(days=int(row['Delivery']))
        stepup = datetime.datetime.strptime(row['Step-up'], '%Y-%m-%d')
        if stepup < launch_plus_delivery:
            append['Maturity'].append(row['Step-up'])
        else:
            append['Maturity'].append(launch_plus_delivery)

# add your new data as a new column to the old dataframe
df['Maturity'] = append['Maturity']
...