2017-03-09 8 views
3

Ich habe einen Datenrahmen wie unten:bedingte Anforderung neue Spalte für Pandas Datenrahmen erstellen

Name IDNum  BossNum 
John 1   0 
Matt 2   1 
Mike 3   2 
Jack 4   1 

Wie kann ich eine zusätzliche Spalte erstellen BossName wie unten genannt:

Erwartete Ausgabe:

Name IDNum  BossNum  BossName 
John 1   0   John/none (I don't care about boss being ided) 
Matt 2   1   John 
Mike 3   2   Matt 
Jack 4   1   John 

Ich habe derzeit versucht:

df['BossName'] = df['Name'][df['BossNum'] in df['IDNum']] 

Dies hat überhaupt nicht funktioniert. Irgendwelche Ideen, wie ich das erreichen könnte, wären großartig.

Antwort

6

können Sie eine Reihe Name mit Index als IDNum, erstellen und verwenden Sie dann map:

df['BossName'] = df.BossNum.map(df.set_index('IDNum').Name) 
df 

enter image description here

2

Psidom schon hat man mit der richtigen Antwort bedeckt, aber es ist auch wert Sie erwähnen könnte explizit eine neue Serie für map erstellen, die nur enthält, was Sie brauchen. sicherlich schneller für eine größere Datenrahmen mit vielen anderen Spalten

df.BossNum.map(pd.Series(df.Name.values, index=df.IDNum)) 

Dies kann etwas schneller sein als viele Spalten ohne den Index für eine kleine Datenrahmen Einstellung wird aber, wie Sie einige zusätzliche Kosten, da die Anzahl der Spalten erhöht entstehen wenn Sie den Index für den gesamten DataFrame festlegen.

Verwandte Themen