我以前问过这个问题,得到的回答是,当时测试用例有效,但现在却产生了不正确的结果。我的数据查看了员工从工作到他们向谁报告的历史记录。我想看到的是,当一个角色被空出并有人填补时。这可以通过数据集中的ManagerPosNum列来识别。如果号码保持不变,但名字改变,那么它是一个空缺的角色,直到一个人唯一的号码改变为他们的号码。
样本数据:
EmpID Date ManagerName ManagerID ManagerPosNum
101 May 2022 Adam 201 1111
101 June 2022 Adam 201 1111
102 February 2021 James 301 2222
102 March 2021 James 301 2222
102 April 2021 Adam 201 2222
102 May 2021 Adam 201 2222
103 August 2022 Mary 401 3333
103 September 2022 Adam 201 3333
103 October 2022 Adam 201 3333
103 November 2022 Paul 501 4444
预期输出:
EmpID Date ManagerName ManagerID ManagerPosNum VacantManager
101 May 2022 Adam 201 1111
101 June 2022 Adam 201 1111
102 February 2021 James 301 2222
102 March 2021 James 301 2222
102 May 2021 Adam 201 2222 James
102 June 2021 Adam 201 2222 James
103 August 2022 Mary 401 3333
103 September 2022 Adam 201 3333 Mary
103 October 2022 Adam 201 3333 Mary
103 November 2022 Paul 501 4444
当前代码可以工作,但在运行更多测试用例后开始失败。
验证码:
df['Vacant Manager'] = (df.groupby('EmpID', group_keys = False)['ManagerID']
.apply(lambda s:s.where(pd.factorize (s[::-1])[0][::-1] == 1).ffill())
1条答案
按热度按时间ctehm74n1#
你可以尝试这样的东西: