我试图从每行的列总和中获取最大值,并将最大值分配给新列,
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 :(得分:1)
您可以使用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 :(得分:1)
你应该将你的日期*列转换为pd.Timeadelta。
你可以使用apply with lambda function
df[daylikecolumne].apply(lambda c: pd.Timedelta(c,'D'))
通过这种方式,您可以在兼容的数据类型之间添加减法,例如timedelta和datetime