Я пытаюсь получить максимум из суммы столбцов для каждой строки и назначить максимальное значение для нового столбца,

df['due_date'] = df.apply(
        lambda x: max(x['days_1'] + x['baseline_date'],
                      x['days_2'] + x['baseline_date'],
                      x['days_3'] + x['baseline_date']), axis=1)

«DF» выглядит так.

days_1    days_2    days_3    baseline_date
0         0         0         2018-01-01
12        0         0         2017_01-01
0         3         0         2016-01-01
0         0         4         2015-01-01

baseline_date относится к datetime dtype, days_1/2/3 относится к типу int.

Код дал мне

ValueError: ('Cannot add integral value to Timestamp without freq.', 'occurred at index 0')

Мне интересно, как получить максимальную дату, полученную base_line_date + days1/2/3.

0
daiyue 13 Мар 2018 в 21:21

2 ответа

Лучший ответ

Вы можете сделать max с axis = 1

pd.to_timedelta(df.iloc[:,:3].max(1),'D')+pd.to_datetime(df.baseline_date)
Out[437]: 
0   2018-01-01
1   2017-01-13
2   2016-01-04
3   2015-01-05
dtype: datetime64[ns]
1
YOBEN_S 13 Мар 2018 в 18:26

Вы должны конвертировать ваши дни * столбцы в pd.Timeadelta.

Вы можете использовать применить с лямбда-функцией

df[daylikecolumne].apply(lambda c: pd.Timedelta(c,'D'))

Таким образом, вы можете добавить вычитание между совместимыми типами данных, например, timedelta и datetime

1
00__00__00 13 Мар 2018 в 18:27