Python根据列

时间:2017-08-30 14:50:27

标签: python pandas

从我的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

我已经尝试构建一个函数来执行此操作,但无法弄清楚语法。我很欣赏你的帮助,因为我是这项工作的新手。

1 个答案:

答案 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