通过ID获取匹配日期中最长日期的结果

时间:2019-02-22 20:52:40

标签: python pandas

对于每个与类别匹配的ID,我想找到与最新日期相对应的行,然后在另一列中返回该条目。

这里有MRE。

exFilterDF= pd.DataFrame([['1234','1234','1234','5678','5678','5678','9TJQ','9TJQ','9TJQ'],\
['good','ignore','good','good','good','ignore','good','good','ignore'],
['2017-11-10 12:40:07','2017-12-18 14:00:07','2017-12-13 17:40:07','2017-12-12 11:40:07','2017-12-19 16:40:07'\
,'2017-10-26 17:40:07','2017-12-13 17:40:07','2017-12-27 13:40:07','2017-10-12 13:40:07'],
['ReturnA','ReturnB','ReturnC','ReturnD','ReturnE','ReturnF','ReturnG','ReturnH','ReturnI']]).transpose()
exFilterDF.columns = ["ID","Category","Date","Result"]
exFilterDF

最终答案应该是

answerDF= pd.DataFrame([['1234','5678','9TJQ'],['ReturnC','ReturnE','ReturnH']]).transpose()
answerDF.columns = ["ID","Result"]
answerDF

这将像我问过的问题here

一样开始

不幸的是,我不能仅仅匹配已经找到的max(date),因为,例如,在这个集合中,2017-12-13 17:40:07ReturnC行的正确日期,但是相同时间戳记位于ReturnG行中(不应返回),因此,如果我们通过标记“好日期”并对其进行过滤来处理,则会得到额外的(错误的)结果。

1 个答案:

答案 0 :(得分:1)

您可以在IDCategory的那些值中groupby good,然后使用idxmax为最近日期的数据框建立索引:

exFilterDF.Date = pd.to_datetime(exFilterDF.Date)
m = exFilterDF[exFilterDF.Category.eq('good')].groupby('ID').Date.idxmax()
exFilterDF.loc[m, ['ID', 'Result']]

    ID   Result
2  1234  ReturnC
4  5678  ReturnE
7  9TJQ  ReturnH