我有两列的csv:employee id 'eid'和经理的employee id 'mid'。尝试获取python代码,此代码将为每位员工添加一列,以显示从经理到CEO的经理的员工ID。 CEO的员工ID为1。最终,我想将结果写回csv。

因此数据看起来像:

eid,    mid
111,    112
113,    112
112,    114
114,    115
115,    1


我期望输出看起来像这样。请注意,虽然没有员工会拥有超过4个级别的经理,但是我还想学习动态命名列的python。

eid,    mid,    l2mid   l3mid   l4mid
111,    112,    114,    115,    1
113,    112,    114,    115,    1
112,    114,    115,    1
114,    115,    1
115,    1


我对编码非常陌生,想尝试自学,但会不断陷入困境。我的问题:
1)我试图使用for语句,该语句在给定的行中包含mid,然后发现该经理的经理,依此类推,直到我到达CEO为止。我一直在尝试以下方法:

df = pd.read_csv('employee.csv')
if mid =! 1
for i in df:
    df.['l2mid'] = df.loc[df.eid == [i], [mid]]


也许我正在倒退,应该尝试按经理对所有员工进行分组?该代码有何不同?

我已经在C#sql中看到了解决方案,并且已经看到了构建treesjson的解决方案。我非常感谢您的帮助和鼓励。

更新:下一步是添加国家/地区列-请参阅:entry here

最佳答案

我相信有一个更好的解决方案,但这是可行的。我用零填充空白。

a = []
for index, row in df.iterrows():
    res = df[df['eid']==row['mid']]['mid'].values
    a.append(0 if not res else res[0])
df['l2mid'] = a

a = []
for index, row in df.iterrows():
    res = df[df['eid']==row['l2mid']]['mid'].values
    a.append(0 if not res else res[0])
df['l3mid'] = a

a = []
for index, row in df.iterrows():
    res = df[df['eid']==row['l3mid']]['mid'].values
    a.append(0 if not res else res[0])
df['l4mid'] = a

df
# output :
# eid   mid l2mid   l3mid   l4mid
# 0 111 112 114 115 1
# 1 113 112 114 115 1
# 2 112 114 115 1   0
# 3 114 115 1   0   0
# 4 115 1   0   0   0


您可以为例程定义一个函数。

def search_manager(target_column, new_column):
    a = []
    for index, row in df.iterrows():
        res = df[df['eid']==row[target_column]]['mid'].values
        a.append(0 if not res else res[0])
    df[new_column] = a

search_manager('mid', 'l2mid')
search_manager('l2mid', 'l3mid')
search_manager('l3mid', 'l4mid')

关于python - 经理和员工ID的python层次结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45929048/

10-13 02:52