如何从一组日期列中获取最大日期值

sin*_*047 2 python datetime numpy python-3.x pandas

这是样本数据:

import pandas as pd
d = {'name': ['john', 'tom', 'phill', 'nero', 'bob', 'rob'], 'date1' :['2015-10-05', '2015-01-05', '2015-07-06', '2015-10-06', '2015-10-06', '2015-12-08'], 'date2' :['2015-10-05', '2015-01-05', '2015-07-06', '2015-08-06', '2015-09-06', '2015-12-08'], 'date3' :['2015-07-05', '2015-11-05', '2015-07-06', '2015-11-06', '2015-05-06', '2015-05-08']}
df2 = pd.DataFrame(data = d)
df2['date1'] = pd.DatetimeIndex(df2['date1'])
df2['date2'] = pd.DatetimeIndex(df2['date2'])
df2['date3'] = pd.DatetimeIndex(df2['date3'])
Run Code Online (Sandbox Code Playgroud)

这是表格

在此输入图像描述

问题1:我想创建一个新列max_date,它将具有每行的最大日期值.我以为我可以创建这些列的列表,然后对它们应用max但是它不起作用.我找到了numpy.amax(),但无法使其正常工作.

问题2:我必须使用列名来指定那些列,不能使用像df2 [,0:2]这样的列的位置索引

更新的问题2 -当我说"使用的列名" -我的意思是我有列名,这是我需要使用像[DATE1,DATE2,DATE3]列表.对不起,如果我的帖子不清楚.

piR*_*red 6

select_dtypes

无论命名约定如何,这都适用于所有日期时间列.

df2.assign(max_date=df2.select_dtypes('datetime').max(1))

       date1      date2      date3   name   max_date
0 2015-10-05 2015-10-05 2015-07-05   john 2015-10-05
1 2015-01-05 2015-01-05 2015-11-05    tom 2015-11-05
2 2015-07-06 2015-07-06 2015-07-06  phill 2015-07-06
3 2015-10-06 2015-08-06 2015-11-06   nero 2015-11-06
4 2015-10-06 2015-09-06 2015-05-06    bob 2015-10-06
5 2015-12-08 2015-12-08 2015-05-08    rob 2015-12-08
Run Code Online (Sandbox Code Playgroud)


WeN*_*Ben 5

使用max与filter like

df2['max_date']=df2.filter(like='date',axis=1).max(1)
df2
Out[157]: 
       date1      date2      date3   name   max_date
0 2015-10-05 2015-10-05 2015-07-05   john 2015-10-05
1 2015-01-05 2015-01-05 2015-11-05    tom 2015-11-05
2 2015-07-06 2015-07-06 2015-07-06  phill 2015-07-06
3 2015-10-06 2015-08-06 2015-11-06   nero 2015-11-06
4 2015-10-06 2015-09-06 2015-05-06    bob 2015-10-06
5 2015-12-08 2015-12-08 2015-05-08    rob 2015-12-08
Run Code Online (Sandbox Code Playgroud)