lativedelta - Добавить количество месяцев на основе значений столбца - PullRequest
0 голосов
/ 18 февраля 2019

Я хотел бы добавить «точные месяцы» к дате начала к дате начала, чтобы вычислить дату окончания и играл с относительной дельтой.У меня есть следующее:

df1['Start Date'] = ['11/1/2018', '3/15/2019', NaN, '5/15/2019', '2/28/2017', NaN, '10/31/2018']

df1['Months'] = [12.0, 36.0, 15.0, 36.0, 12.0, 9.0, 5.0]

df1 ['Start Date'] в настоящее время datetime64 [нс], в то время как df1 ['Months'] является float64.

Конечный результат должен быть df1 ['Start Date'] + .df1 ['Months'] - 1 день, но аспект относительной дельты важен, так как я хотел бы вернуть «точные месяцы».NaN может продолжать возвращать NaN.

Вот моя попытка вычислить:

df1['End_Date'] = df1['Effective_Date'].apply(lambda x: x + relativedelta(months = df1['Months'].astype(float))) - pd.DateOffset(days = 1)

Я получаю следующую ошибку, которую не знаю, как решить:

cannot convert the series to <class 'int'>

Я попробовал следующее безрезультатно:

df1['Months'].astype('timedelta64[D]')

Очень признателен за вашу помощь.

1 Ответ

0 голосов
/ 18 февраля 2019

Сначала преобразовать столбец в дату и время, добавить месяцы на DataFrame.apply для строк на axis=1 и в последний раз вычесть один день:

df1['Start Date'] = pd.to_datetime(df1['Start Date'])

f = lambda x: x['Start Date'] + relativedelta(months = int(x['Months']))
df1['End_Date'] = df1.apply(f, axis=1) - pd.DateOffset(days = 1)
print (df1)
  Start Date  Months   End_Date
0 2018-11-01    12.0 2019-10-31
1 2019-03-15    36.0 2022-03-14
2        NaT    15.0        NaT
3 2019-05-15    36.0 2022-05-14
4 2017-02-28    12.0 2018-02-27
5        NaT     9.0        NaT
6 2018-10-31     5.0 2019-03-30
...