gpt4 book ai didi

python - 如何在没有单独表(pandas 或 SQL)的情况下获取 Employee --> Manager?

转载 作者:搜寻专家 更新时间:2023-10-30 20:17:33 24 4
gpt4 key购买 nike

在 pandas 中是否有简单的代码可以做到这一点?或者我应该试试 SQL(我对 SQL 不是很熟悉)。这是我目前所拥有的(假的例子,真实的大约有 20,000 个人)

员工_df =

    EmpID   Name    Title   ManagerID
abc123 John Head pqr456
pqr456 Jake VP bs92999
zyx987 Jill Lead abc123
bs92999 Bob SVP NaN

复制数据框:manager_df = employee_df

roster = pd.merge(manager_df, employee_df, how='outer', left_on ='ManagerID', right_on = 'EmpID')

我的输出很乱,虽然看起来是正确的(它告诉我谁是经理,但没有通过引用自身的单独表格)。

    EmpID_x Name_x  Title_x ManagerID_x  EmpID_y Name_y Title_y ManagerID_y
abc123 John Head pqr456 pqr456 Jake VP bs92999
pqr456 Jake VP bs92999 bs92999 Bob SVP NaN
zyx987 Jill Lead abc123 abc123 John Head pqr456
bs92999 Bob SVP NaN NaN NaN NaN NaN
NaN NaN NaN NaN zyx987 Jill Lead abc123

最常见的期望输出是:

EmpID | Name | Title | Manager_Name

但有时我也需要另一个级别(老板的老板),最大潜力大约 5 层,这看起来很疯狂,但有很多层次 - 这么高的层次并不是一直都需要,但我如果需要,希望能够将此数据滚动到更高级别:

EmpID | Name | Title | Manager_Name_1 | Manager_Name_2

第三个数据框是reporting_df:

EmpID | ManagerID | StartDate | EndDate

有时甚至在月中也会发生管理层变动,结果应反射(reflect)在该日期“拥有”该员工的经理。

file = 任何具有 EmpID 的文件或报告,我可能想在其中找出经理(或他们的经理)在该日期的身份,该日期也包含在文件中。这是解决这个问题的正确方法吗?

for i in range(len(file)):  
file.ix[i,'Manager'] = reporting_df[(reporting_df.StartDate.shift(-1) > file.StartDate[i]) &(reporting_df.StartDate <= file.Date[i])]

最佳答案

这在某些方面可能有点棘手,所以让我们逐步构建它。首先,让我们稍微重命名这些列,以便稍后进行操作(只需将“_0”添加到其中的三个列):

     EmpID Name_0 Title_0 ManagerID_0
0 abc123 John Head pqr456
1 pqr456 Jake VP bs92999
2 zyx987 Jill Lead abc123
3 bs92999 Bob SVP NaN

这里的主要技巧是我们需要一个映射,这可以用一个系列来完成:

df.set_index('EmpID')['Name_0']

这里的关键是我们将 'EmpID' 设置为索引,然后它会为我们提供从 'EmpID' 到 'Name_0' 的映射,我们可以对 'Title_0' 和 'ManagerID_0' 做同样的事情。

对一列进行尝试:

df['ManagerID_0'].map( df.set_index('EmpID')['Name_0'] )

0 Jake
1 Bob
2 John
3 NaN

现在只需用 'for' 包裹起来即可获得完整版本:

for i in range(3):
for col in ['Name_','Title_','ManagerID_']:
df[col+str(i+1)] = df['ManagerID_'+str(i)].map(
df.set_index('EmpID')[col+'0'] )

EmpID Name_0 Title_0 ManagerID_0 Name_1 Title_1 ManagerID_1 Name_2
0 abc123 John Head pqr456 Jake VP bs92999 Bob
1 pqr456 Jake VP bs92999 Bob SVP NaN NaN
2 zyx987 Jill Lead abc123 John Head pqr456 Jake
3 bs92999 Bob SVP NaN NaN NaN NaN NaN

Title_2 ManagerID_2 Name_3 Title_3 ManagerID_3
0 SVP NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN
2 VP bs92999 Bob SVP NaN
3 NaN NaN NaN NaN NaN

我将范围设置为 3,因为每个人的“ManagerID_3”都为 NaN,但如果您有更多级别,当然可以将其设置得更高。

关于python - 如何在没有单独表(pandas 或 SQL)的情况下获取 Employee --> Manager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30386735/

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