2017-08-30 152 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