2017-08-30 150 views
0

从我的df显示具有多级管理者的员工(请参阅前面的问题here),我想根据可能出现的管理员标识将行映射到部门标识跨多个列:Python根据列中的匹配值从字典中写入值

eid, mid, l2mid l3mid 
111, 112, 116, 115 
113, 114, 115, 0 
112, 117, 114, 0 
110, 115, 0,  0  
116, 118, 0,  0 

[编辑:= 110将被丢弃的校正数据设置,以反映EID行 编辑#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 

我试过建立一个函数来做到这一点,但不能完全弄清楚语法。感谢您的帮助,因为我是这项工作的新手。

回答

3

我加了一个解决办法,如果经理列(中旬,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 
+2

为什么这个答案downvoted吗?这是完全正确的。 (+1) –

+1

根据我现在对问题的理解,这个答案是完美的。主席先生,您可以添加多个匹配案例。所以每个人都会知道申请的重要性。 – Dark

+1

@Bharathshetty - 非常感谢你 – jezrael