python 来自经理和员工 ID 的层次结构
python hierarchy from manager and employee id
我有一个包含两列的 csv:员工 ID 'eid'
和经理的员工 ID 'mid'
。尝试获取 python 代码,该代码将为每位员工添加列,显示经理的员工 ID,一直到 CEO。 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# and , and i've seen solutions that build trees and json 中看到了解决方案。我非常感谢任何帮助和鼓励。
更新:下一步是添加国家/地区列 - 请参阅:
我相信有更好的解决方案,但这个可行。我用零填空。
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')
我有一个包含两列的 csv:员工 ID 'eid'
和经理的员工 ID 'mid'
。尝试获取 python 代码,该代码将为每位员工添加列,显示经理的员工 ID,一直到 CEO。 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# and
更新:下一步是添加国家/地区列 - 请参阅:
我相信有更好的解决方案,但这个可行。我用零填空。
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')