2017-03-13 2 views
1

Ich habe ein Datenframe mit einem fehlenden Wert.Python fehlende Werte basierend auf vorhandenen Daten

exam_id exam 
0  1 french 
1  2 italian 
2  3 chinese 
3  4 english 
4  3 chinese 
5  5 russian 
6  1 french  
7  NaN russian 
8  1 french 
9  2 italian 

Ich möchte die fehlende exam_id für Russisch Prüfung basierend auf vorhandenen Informationen ausfüllen. Da exam_id für Russisch 5 ist, möchte ich dem fehlenden den gleichen Wert zuweisen.

+0

nur einmal? oder für alle fehlenden Werte – ryugie

+0

für alle fehlenden Werte! – Sheron

Antwort

3

können Sie gruppieren Datenrahmen von exam, dann tun ein ffill + bfill falls es Werte fehlen vor und nach dem bestehenden Wert:

df.groupby("exam").ffill().bfill() 

enter image description here

1

Dieser Ansatz füllt nicht nur fehlende Werte . Hüte dich. Dies würde jedoch auch für Fehlcodierungen sorgen (z. B. "Französisch" wird als 3 codiert). Wenn Sie ein Wörterbuch für die Sprachen und ihre Werte erstellen und es dann über eine Karte anwenden, wird eine neue Spalte exam_id erstellt. Beachten Sie jedoch, dass, wenn eine Sprache nicht im Wörterbuch erscheint (z. B. "Französisch"), ein fehlender Wert erzeugt wird.

language_test_map = {'french': 1, 
        'italian': 2, 
        'chinese': 3, 
        'english': 4, 
        'russian': 5} 

df['exam_id'] = df['exam'].map(language_test_map) 
Verwandte Themen