2017-10-04 4 views
0
fake = {'EmployeeID' : [0,1,2,3,4,5,6] 
     'ManagerID' : [3,3,5,6,5,4,5] 
     'Name' : ['A','B','C','D','E','F','G']} 

df = pd.DataFrame(fake) 

メンバーEmployeeIDとManagerIDが一致するようにしているので、どの従業員がどのマネージャによって管理されているか把握できます。Pandasのメンバーシップ

私の希望する出力には [EmployeeID、Name、ManagerName]という列があります。

私が考えることができるのは、dfをコピーして列の名前を変更して、マージまたは結合できるということだけです。しかし、私はむしろ他のやり方をしたいと思う。

私にヒントを与えることができれば、それはすばらしいことになります。

ありがとうございます。

+0

列名「ManagerName」を追加する必要があります。 –

答えて

0

使用値として指標ととして社員df.set_index('EmployeeID').Nameを使用して作成することができるEmployeeID -> Name対応関係に基づいてそれらの名前にマネージャーID列、マップするSeries.map方法:

(df.assign(ManagerName = df.ManagerID.map(df.set_index('EmployeeID').Name)) 
    .drop('ManagerID', 1)) 

# EmployeeID Name ManagerName 
#0   0 A  D 
#1   1 B  D 
#2   2 C  F 
#3   3 D  G 
#4   4 E  F 
#5   5 F  E 
#6   6 G  F 
0

はセットアップ:

fake = {'EmployeeID' : [0,1,2,3,4,5,6], 
     'ManagerID' : [3,3,5,6,5,4,5], 
     'Name' : ['A','B','C','D','E','F','G']} 
df = pd.DataFrame(fake) 
df2 = pd.DataFrame({ 
     'ManagerID' : [3,5,6,4], 
     'managername' : ['AA','BB','CC','DD']}) 

ソリューション:merge

df.merge(df2,on='ManagerID',how='left') 
Out[232]: 
    EmployeeID ManagerID Name managername 
0   0   3 A   AA 
1   1   3 B   AA 
2   2   5 C   BB 
3   3   6 D   CC 
4   4   5 E   BB 
5   5   4 F   DD 
6   6   5 G   BB 
関連する問題