pandas DataFrame中每组的最大日期

时间:2014-12-17 11:40:10

标签: python pandas

我发现了类似的问题,但没有任何数据框架中的日期与多列相关联。

我有一个像这样的pandas DataFrame:

    person_ref  post_start   post_number  post_title                   change_date
0   123         2010-08-08   000492       Doorman                      2014-04-17
1   123         2010-08-08   000492       Doorman/Porter               2014-01-14
2   123         2010-08-08   000492       Uniformed Security Officer   2005-12-16
3   123         2011-04-03   000554       Security Officer             2011-01-01
4   123         2010-07-15   000568       Night Security Officer       2010-06-30
5   456         2012-09-17   5080         HR Systems & MI Analyst      2013-08-13
6   456         2012-09-17   5080         HR Systems & MI Adviser      2011-04-07
7   456         2012-09-17   5080         HRIS Adviser                 2010-06-14
8   456         2012-09-17   5080         HR Systems Assistant         2007-09-21

这会显示两名员工(person_ref),他们持有的帖子(post_number)以及这些帖子在其历史记录中所拥有的标题(post_title)。 post_start是员工在帖子中开始的日期,change_date是帖子标题更改的日期。

我希望最终得到一个DataFrame,它为每个员工显示帖子标题,当他们在帖子中开始时:

    person_ref  post_start   post_number  post_title                   change_date
0   123         2010-08-08   000492       Uniformed Security Officer   2005-12-16
1   123         2011-04-03   000554       Security Officer             2011-01-01
2   123         2010-07-15   000568       Night Security Officer       2010-06-30
3   456         2012-09-17   5080         HR Systems & MI Adviser      2011-04-07

归结为最小change_date小于或等于每post_startperson_ref post_number个日期。

我如何在熊猫中实现这一目标?我想我需要按person_refpost_number进行分组,但我很难获得只有正确更改日期的行。

1 个答案:

答案 0 :(得分:4)

df[(df.change_date <= df.post_start)]
    .sort_values(
         by=['person_ref','post_number','post_start','change_date'],
         ascending=[1,1,1,0])
    .groupby(['person_ref','post_number'])
    .first().reset_index()