2017-12-27 7 views
0

Ich habe einen Datenrahmen als so strukturiert: dataframe snapshotTransformation mehr Spalten in einem mit Pandas

Ich frage mich, was die effizienteste Art und Weise in Pandas ist eine neue Spalte „Stufe“, die jeden Wert extrahiert zu erstellen, die isn 't' None 'in den vier Spalten und verwende diesen Wert für die Spalte' stage '. Die verbleibenden vier Spalten können dann gelöscht werden, nachdem die Stage-Spalte einen Wert extrahiert hat, der in keiner Zeile None ist.

Hier ist eine weitere Momentaufnahme der eindeutigen Werte jeder Spalte beteiligt: ​​ unique values

Bitte beachten Sie, dass die Werte in den Spalten in Frage String-Typ sind und keine ist nicht wirklich Nonetype.

+3

Haben Sie etwas dagegen eine tatsächliche Datenrahmen und Code anstelle der Bilder zu teilen? – user32185

Antwort

1
df['New']=df[['A','B','C']].replace('None','').sum(1) 
df 
Out[1477]: 
     A  B  C New 
0 None  B None B 
1  A None None A 
2 None None  C C 

Dateneingabe

df=pd.DataFrame({'A':['None','A','None'],'B':['B','None','None'],'C':['None','None','C']}) 
+0

danke! das hat funktioniert. Ich verstehe jedoch nicht den .sum (1) Teil des Codes. Kannst du erklären, was dort vor sich geht? –

+0

@ KeenanBurke-Pitts Summe (1), summiert die df Zeile für Zeile, es ist String, es wird sie zusammenfügen :-) (PS: Ich ersetze alle Keine sein '') – Wen

+0

danke für die Hilfe! –

0

Betrachten combine_first, unter der Annahme, Keine ist kein Stringliteral 'None'.

df['stage'] = df['doggo'].combine_first(df['floorfer'])\ 
         .combine_first(df['pupper'])\ 
         .combine_first(df['puppo']) 

Alternativ für DRY-er Ansatz verwenden reduce:

from functools import reduce 
... 

df['stage'] = reduce(lambda x,y: x.combine_first(y), 
        [df['doggo'], df['floorfer'], df['pupper'], df['puppo']]) 
Verwandte Themen