我发现了类似的问题,但没有任何数据框架中的日期与多列相关联。
我有一个像这样的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_start
每person_ref
post_number
个日期。
我如何在熊猫中实现这一目标?我想我需要按person_ref
和post_number
进行分组,但我很难获得只有正确更改日期的行。
答案 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()