2017-06-24 6 views
1

Dies ist eine Teilmenge von Datenrahmen, die ich habe. Für jede Zeile, die diese Satzspalte enthält, wird die Spalte A B C D für die nächsten zwei Zeilen wiederholt, ohne dass ein Wert für die Satzspalte vorhanden ist. Wie kann ich die zweite Zeile mit Nullwert für Sätze entfernen. Ich muss die erste Zeile mit Nullwert für die Satzspalte behalten.So entfernen Sie eine Zeile eine bestimmte Zeile mit Nullwert

 A B C D    R  sentence    ADR 
    112 135 21 EffexorXR.21 1 lack of good feeling. good 
    113 135 21 EffexorXR.21 1        1 
    114 135 21 EffexorXR.21 1 
    115 136 21 EffexorXR.21 2 Feel disconnected   disconnected 
    116 136 21 EffexorXR.21 2   
    117 136 21 EffexorXR.21 2  
    118 142 22 EffexorXR.22 1 Weight gain    gain 
    119 142 22 EffexorXR.22 1        1 
    120 142 22 EffexorXR.22 1 

Der Ausgang ist wie dieser

A B C D    R  sentence    ADR  
    112 135 21 EffexorXR.21 1 lack of good feeling.  good 
    113 135 21 EffexorXR.21 1        1 
    115 136 21 EffexorXR.21 2 Feel disconnected  disconnected  
    116 136 21 EffexorXR.21 2 
    118 142 22 EffexorXR.22 1 Weight gain    gain 
    119 142 22 EffexorXR.22 1        1 

Wenn ich den folgenden Code verwenden:

df = df[pd.notnull(df['sentences'])], dann entfernen Sie die beiden Zeilen mit Nullwerten. Irgendein Vorschlag ?

Die folgende Lösung funktioniert nicht.

df.set_index('A').drop_duplicates().reset_index() 

Antwort

1

Mai werden Sie Duplikate von kombinierten Spalten und es verwenden, um mask original dataframe sehen:

new_df = df[~df[['B','C','D', 'R', 'sentence']].duplicated()] 
print(new_df) 

Ausgang:

 A B C    D R    sentence   ADR 
0 112 135 21 EffexorXR.21 1 lack of good feeling.   good 
1 113 135 21 EffexorXR.21 1         1 
3 115 136 21 EffexorXR.21 2  Feel disconnected disconnected 
4 116 136 21 EffexorXR.21 2          
6 118 142 22 EffexorXR.22 1   Weight gain   gain 
7 119 142 22 EffexorXR.22 1         1 
1

Sie können drop_duplicates verwenden. Spalte A ist eindeutig, daher legen wir sie als Index fest. Es wird die verbleibenden Spalten verwenden, um nach Duplikaten zu suchen und sie gegebenenfalls zu löschen. Schließlich reset_index, um Spalte A zurück zu bringen.

df.set_index('A').drop_duplicates().reset_index() 
Out[847]: 
    A B C    D R    sentence 
0 112 135 21 EffexorXR.21 1 lack of good feeling. 
1 113 135 21 EffexorXR.21 1      
2 115 136 21 EffexorXR.21 2  Feel disconnected 
3 116 136 21 EffexorXR.21 2      
4 118 142 22 EffexorXR.22 1   Weight gain 
5 119 142 22 EffexorXR.22 1      

Aktualisierte Antwort, um nur eine Teilmenge als Schlüssel zum Prüfen von Duplikaten zu verwenden.

df.drop_duplicates(subset=['B','C','D','sentence']) 
Out[866]: 
    A B C    D R    sentence   ADR 
0 112 135 21 EffexorXR.21 1 lack of good feeling.   good 
1 113 135 21 EffexorXR.21 1         1 
3 115 136 21 EffexorXR.21 2  Feel disconnected disconnected 
4 116 136 21 EffexorXR.21 2         nan 
6 118 142 22 EffexorXR.22 1   Weight gain   gain 
7 119 142 22 EffexorXR.22 1         1 
+0

Danke, aber ich kann nicht doppelt verwenden. Weil es andere Spalten mit Werten für die erste Zeile mit einem Nullwert in der Satzspalte gibt. Für die zweite Zeile kann eine andere Spalte einige Werte enthalten. Haben Sie Vorschläge, ob die zwei Zeilen nicht dupliziert sind? – Mary

+0

@Mary, ich habe die Antwort basierend auf Ihrem Update aktualisiert. Wenn Spalte D verwendet werden kann, um die Gruppen eindeutig zu identifizieren, können Sie einfach ['D', 'Satz'] als Schlüssel verwenden. – Allen

Verwandte Themen