gpt4 book ai didi

python-3.x - 经理和员工ID之间的python pandas递归查找

转载 作者:行者123 更新时间:2023-12-05 05:07:51 26 4
gpt4 key购买 nike

我有一个像下面这样的数据框

    import pandas as pd
import numpy as np
raw_data = {'Emp_ID':[144,220,155,200],
'Mgr_ID': [200, 144,200,500],
'Type': ['O','I','I','I'],
'Location' : ['India','UK','UK','US']
}

df2 = pd.DataFrame(raw_data, columns = ['Emp_ID','Mgr_ID', 'Type','Location'])

print(df2)

enter image description here

我想获得他直接/间接报告的经理 ID 和最终员工 ID...假设经理 ID 200 直接报告 144 和 155 并间接报告员工 220。所以我想为经理 200 单独设置 3 条记录,如下所示输出..对于其他所有经理 ID 都是这样

想要的输出如下

enter image description here

最佳答案

查找父/子或 ID 之间的关系涉及图论,因此您最好使用 Networkx package .您需要通过 pip 安装它并导入它。使用 networkx from_pandas_edgelist 创建图 g。对于每个经理,他/她的直属下有多个员工。但是,每个员工都应该只有一个直接经理。因此,我们从 Emp_ID 开始。使用 genex(如果您愿意,也可以使用 listcomp)为每位员工调用 nx.ancestors,并将其传递给创建数据帧 df3。最后,分解 Mgr_ID 的一系列列表并返回到df2 以获得最终输出。

import pandas as pd
import networkx as nx

g = nx.from_pandas_edgelist(df2, source='Mgr_ID', target='Emp_ID', create_using=nx.DiGraph)

df3 = pd.DataFrame(([list(nx.ancestors(g, x)), x] for x in df2.Emp_ID),
index=df2.index, columns=['Mgr_ID', 'Emp_ID'])

df_final = df3.explode('Mgr_ID').join(df2[['Type', 'Location']])

Out[23]:
Mgr_ID Emp_ID Type Location
0 200 144 O India
0 500 144 O India
1 144 220 I UK
1 500 220 I UK
1 200 220 I UK
2 200 155 I UK
2 500 155 I UK
3 500 200 I US

关于python-3.x - 经理和员工ID之间的python pandas递归查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58791543/

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