根据最近的日期,Pandas Aggregate / Group

时间:2013-06-10 17:49:22

标签: python-2.7 pandas

我有一个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显示一行 有关如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:5)

您可以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

(注意:它们不是有序的,所以在这种情况下这不起作用!)

答案 1 :(得分:1)

在Hayden的回复中,我认为使用x.loc代替x.iloc更好,因为df数据帧的索引可能是稀疏的(在这种情况下,iloc将不起作用)。

(我没有在stackoverflow上指出将其发布在回复的评论中)。