首页 > 解决方案 > 如何从一组日期列中获取最大日期值

问题描述

这是样本数据:

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'])

这是桌子

在此处输入图像描述

问题 1:我想创建一个新列 max_date,每行都有最大日期值。我以为我可以创建这些列的列表,然后对它们应用 max ,但它没有用。我找到了 numpy.amax(),但无法让它工作。

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

问题 2 的更新- 当我说“使用列名”时 - 我的意思是我有一个列名列表,我需要像 [date1, date2, date3] 一样使用它。抱歉,如果我的帖子不清楚。

标签: pythonpython-3.xpandasnumpydatetime

解决方案


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

推荐阅读