2016-08-05 12 views
3

Ich habe folgenden Datenrahmen (df1) in Python:Wie füge ich eine neue Spalte zu einem Datenrahmen in Python hinzu und füge d/f-Werte für d/f-Zeilen ein?

  ID  Date  Time  XYZ 
0  GP3 2016-01-08 16:00:00 64 
1  GP2 2016-01-08 16:00:00 557 
2  GP4 2016-01-08 16:00:00 747 
3  GP1 2016-01-08 16:00:00 406 
4  EP3 2016-01-08 16:00:00 64 

Ich möchte es eine weitere Spalte 'ABC' hinzuzufügen, d/f-Werte (die aus einem anderen Wörterbuch (dict1 gezogen werden), basierend auf der 'ID' in Datenrahmen)

  ID  Date  Time  XYZ  ABC 
0  GP3 2016-01-08 16:00:00  64  23 
1  GP2 2016-01-08 16:00:00 557  45 
2  GP4 2016-01-08 16:00:00 747  56 
3  GP1 2016-01-08 16:00:00 406  89 
4  EP3 2016-01-08 16:00:00  64  14 

ich hat versucht, folgende:

df1["ABC"]=[0]*df1.shape[0] 
for i in df1.iterrows(): 
    i[1][4] = dict1[i[1][0]] # dict1[i[1][0]] gives the desired int values 

Aber, ich bin die Werte von 'ABC' zu aktualisieren, in dem Datenrahmen nicht in der Lage. Sie kommen alle als 0. Wie aktualisiert man alle Werte? dict1:

dict1={'GP1':89,'GP2':45,'GP3':23,'GP4':56,'EP3':14} 

Antwort

1

Verwenden Sie die .map Methode:

df1['ABC'] = df1['ID'].map(dict1) 

df1 
Out[7]: 
    ID  Date  Time XYZ ABC 
0 GP3 2016-01-08 16:00:00 64 23 
1 GP2 2016-01-08 16:00:00 557 45 
2 GP4 2016-01-08 16:00:00 747 56 
3 GP1 2016-01-08 16:00:00 406 89 
4 EP3 2016-01-08 16:00:00 64 14 

Wenn Sie zusätzliche Elemente in ID-Serie haben, wird es NaN zurück. Wenn Sie sie mit einem Standardwert ändern möchten, können Sie beispielsweise am Ende .fillna(0) verwenden. Wenn Sie die ursprünglichen Werte aus der ID-Serie verwenden möchten, verwenden Sie stattdessen .fillna(df1['ID']).

+0

Vielen Dank. Es wirkt wie ein Zauber. –

+0

Gern geschehen. :) – ayhan