从我的df向员工展示多级经理(请参阅先前的问题here),我想根据可能出现在多个列中的经理ID将行映射到部门ID:
eid, mid, l2mid l3mid
111, 112, 116, 115
113, 114, 115, 0
112, 117, 114, 0
110, 115, 0, 0
116, 118, 0, 0
[编辑:更正数据集以反映eid = 110的行将被删除 编辑#2:修改了eid = 112的行,以反映我需要搜索多个列以获得字典中的匹配。]
字典是
country = {112: 'US', 114: 'Ireland', 118: 'Mexico'}
我想编写Python,搜索管理器列'mid':'l3mid',然后将国家字符串值写入新列。如果他们没有来自字典中某个国家/地区代码的经理,我想删除行。所以我正在寻找的输出是:
eid, mid, l2mid l3mid country
111, 112, 116, 115, US
113, 114, 115, 0, Ireland
112, 117, 114, 0 Ireland
116, 118, 0, 0 Mexico
我已经尝试构建一个函数来执行此操作,但无法弄清楚语法。我很欣赏你的帮助,因为我是这项工作的新手。
答案 0 :(得分:2)
我添加了一个解决方案,如果管理器列(mid,l2mid,l3mid)值与字典键匹配,则值由,
分割连接:
s = df.drop('eid',1).applymap(country.get)
.dropna(how='all', axis=0)
.apply(lambda x: ', '.join(x.dropna()), 1)
df = df.loc[s.index].assign(country=s)
print (df)
eid mid l2mid l3mid country
0 111 112 114 115 US, Ireland
1 113 114 115 0 Ireland
2 112 114 118 0 Ireland
4 116 118 0 0 Mexico