我有一个如下的 DataFrame,其中 Id 是一个字符串,Date 是一个日期时间:
Id Date
1 3-1-2012
1 4-8-2013
2 1-17-2013
2 5-4-2013
2 10-30-2012
3 1-3-2013
我想合并表格,只为每个具有最近日期的 Id 显示一行。
关于如何做到这一点的任何想法?
我有一个如下的 DataFrame,其中 Id 是一个字符串,Date 是一个日期时间:
Id Date
1 3-1-2012
1 4-8-2013
2 1-17-2013
2 5-4-2013
2 10-30-2012
3 1-3-2013
我想合并表格,只为每个具有最近日期的 Id 显示一行。
关于如何做到这一点的任何想法?
您可以groupby
在 Id 字段中:
In [11]: df
Out[11]:
Id Date
0 1 2012-03-01 00:00:00
1 1 2013-04-08 00:00:00
2 2 2013-01-17 00:00:00
3 2 2013-05-04 00:00:00
4 2 2012-10-30 00:00:00
5 3 2013-01-03 00:00:00
In [12]: g = df.groupby('Id')
如果您不确定顺序,您可以执行以下操作:
In [13]: g.agg(lambda x: x.iloc[x.Date.argmax()])
Out[13]:
Date
Id
1 2013-04-08 00:00:00
2 2013-05-04 00:00:00
3 2013-01-03 00:00:00
对于每个组,它会抓取具有最大(最新)日期的行(argmax 部分)。
如果你知道它们是有序的,你可以取最后一个(或第一个)条目:
In [14]: g.last()
Out[14]:
Date
Id
1 2013-04-08 00:00:00
2 2012-10-30 00:00:00
3 2013-01-03 00:00:00
(注意:它们不按顺序排列,因此在这种情况下不起作用!)
在 Hayden 的回应中,我认为使用 x.loc 代替 x.iloc 更好,因为 df 数据帧的索引可能是稀疏的(在这种情况下 iloc 将不起作用)。
(我在 stackoverflow 上没有足够的点数将其发布在响应的评论中)。