2017-11-21 2 views
0

Ich möchte die Werte aus df['A'] übergeben, um Nullwertzählung und eindeutigen Wert für den Spaltentitel in df2 mit dem Zeilenwert von df1 zu ermitteln.Zeilenwert aus Datenframe verwenden, um Spalten im zweiten Datenframe abzufragen

df 
A B C 
AA 1 2 
AB 1 3 
AC 1 2 


df2 
AA AB AC 
X  Null F 
Null R  F 
Null R  Y 

Der Code sollte wie folgt ausgegeben:

df1 
A B C NullCount UniqueCount 
AA 1 2 2   1 
AB 1 3 1   1 
AC 1 2 0   2 

Ich habe als eine Funktion definiert, und dann ist es zu df1 Anwendung, aber ich bin mir nicht sicher, ob dies der beste Weg zu gehen. Ich bin neu zu Python, so dass jede Hilfe geschätzt wird.

Antwort

2

Ab v0.20 können Sie agg verwenden + merge:

df 

    A B C 
0 AA 1 2 
1 AB 1 3 
2 AC 1 2 

df2 

    AA AB AC 
0 X NaN F 
1 NaN R F 
2 NaN R Y 
df3 = df2.agg(['count', 'nunique']).T 
df3['count'] = df2.isnull().count(1).values - df3['count'] 

df.merge(df3.rename_axis('A', 0).reset_index()) 

    A B C count nunique 
0 AA 1 2  2  1 
1 AB 1 3  1  1 
2 AC 1 2  0  2 

Alternativ können Sie die count Berechnung in einem Schritt mit einem Lambda kombinieren könnte:

df3 = df2.agg([lambda x: x.size - x.count(), 'nunique']).T 
df3.columns = ['NullCount', 'UniqueCount'] 

    A B C NullCount UniqueCount 
0 AA 1 2   2   1 
1 AB 1 3   1   1 
2 AC 1 2   0   2 

Hinweis Möglicherweise müssen Sie die Zeichenfolge "Null" in nan konvertieren . Sie können mit einem replace Aufruf tun:

df2 = df2.replace("Null", np.nan) 
+1

glücklich Urlaub, mein Freund :-) – Wen

+0

@Wen Glückliche Danksagung Sie auch! –

+1

Vielen Dank für Ihre Hilfe! Das ist toll. – ParalysisByAnalysis

Verwandte Themen