gpt4 book ai didi

python - 筛选小于另一个日期的最大日期

转载 作者:行者123 更新时间:2023-12-01 08:03:53 26 4
gpt4 key购买 nike

我有一个包含人员和工作的日期框架,其中与工作相关的单位可能会在一年中发生变化。如何筛选小于该人员和职位的报告日期列的最大单位日期?

我的数据框如下所示:

person_id   report_date     position_no     unit_date   unit
1 10/1/2017 123456 9/1/2017 789
1 10/1/2017 123456 9/10/2017 657
2 10/1/2017 251566 8/1/2017 123
2 10/1/2017 251566 8/1/2016 123
1 10/1/2018 123456 1/1/2018 541
1 10/1/2018 123456 2/1/2018 365
2 10/1/2018 251566 12/1/2017 155
2 10/1/2018 251566 3/1/2018 355

这是我想要的输出:

person_id   report_date     position_no     unit_date   unit
1 10/1/2017 123456 9/10/2017 657
2 10/1/2017 251566 8/1/2017 123
1 10/1/2018 123456 2/1/2018 365
2 10/1/2018 251566 3/1/2018 355

我刚开始使用带有过滤器的 lambda,我曾希望这样的东西能够工作,但事实并非如此:

df.groupby(['person_id','report_date','position_no']).filter(lambda x: x['unit_date'].max() < x['report_date'])

最佳答案

设置

df.report_date = pd.to_datetime(df.report_date)
df.unit_date = pd.to_datetime(df.unit_date)
<小时/>

最好不要将 lambda 与过滤器一起使用,您可以在此处使用基本的比较运算符:

m = df['unit_date'] < df['report_date']
u = df.loc[m].groupby(['person_id', 'position_no', 'report_date'])['unit_date'].idxmax()

df.loc[u]

   person_id report_date  position_no  unit_date  unit
1 1 2017-10-01 123456 2017-09-10 657
5 1 2018-10-01 123456 2018-02-01 365
2 2 2017-10-01 251566 2017-08-01 123
7 2 2018-10-01 251566 2018-03-01 355

如果您希望顺序与原始 DataFrame 匹配:

df.loc[u.sort_values()]

   person_id report_date  position_no  unit_date  unit
1 1 2017-10-01 123456 2017-09-10 657
2 2 2017-10-01 251566 2017-08-01 123
5 1 2018-10-01 123456 2018-02-01 365
7 2 2018-10-01 251566 2018-03-01 355

关于python - 筛选小于另一个日期的最大日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55620292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com