2016-05-26 3 views
1

Ich habe einen Pandas Datenrahmen.Wie zu erhalten und zeigen die Anzahl der Werte in jeder Spalte

df:

col1 col2 col3 col4 col5 
0 1.0 1.0 NaN NaN 1.0 
1 NaN 1.0 1.0 2.0 1.0 
2 2.0 NaN 1.0 NaN 1.0 

Ich möchte die gezählte Anzahl von Zeilen erhalten, die die gleichen Daten, die jede Spalte wie folgt haben.

OutPut:

col1 col2 col3 col4 col5 
1.0 1 2 2 0 3 
2.0 1 0 0 1 0 

oder nur die Zählung eines Wertes.

col1 col2 col3 col4 col5 
1.0 1 2 2 0 3 

Gibt es Möglichkeiten, meine erwartete Ausgabe zu erhalten?

Antwort

0

Sie value_counts Methode der Pandas Series verwenden könnte und dann fillna zum Füllen NaN Werte mit 0:

In [7]: df 
Out[7]: 
    col1 col2 col3 col4 col5 
0 1.0 1.0 NaN NaN 1.0 
1 NaN 1.0 1.0 2.0 1.0 
2 2.0 NaN 1.0 NaN 1.0 

In [8]: df.apply(lambda x: x.value_counts()).fillna(0) 
Out[8]: 
    col1 col2 col3 col4 col5 
1.0  1 2.0 2.0 0.0 3.0 
2.0  1 0.0 0.0 1.0 0.0 

Wenn benötigen Sie int Werte statt float Sie verwenden könnte astype mit int auch:

In [9]: df.apply(lambda x: x.value_counts()).fillna(0).astype(int) 
Out[9]: 
    col1 col2 col3 col4 col5 
1.0  1  2  2  0  3 
2.0  1  0  0  1  0 
+0

Vielen Dank für die Information! Es funktionierte. :) –

0

bearbeiten: df.replace (np.NaN, 0) nicht funktioniert zuverlässig über Versionen, so aktualisiert statt df.fillna (0) zu verwenden.

Um das Auftreten eines Werts in jeder Spalte zu zählen, verwenden Sie value_counts. Nicht vorkommende Werte werden NaN, so müssen mit 0 ersetzt werden:

>>> df.apply(pd.value_counts).fillna(0) 


    col1 col2 col3 col4 col5 
1  1  2  2  0  3 
2  1  0  0  1  0 

Um eine bestimmte Zeile abzurufen:

>>> df.apply(pd.value_counts).fillna(0).loc[1:1] 

    col1 col2 col3 col4 col5 
1  1  2  2  0  3 
+0

ich versucht, mit np.Nan ersetzen, aber es hat nicht funktioniert im Moment. Ich werde den Grund untersuchen, danke für die Information! –

+0

Ich war überrascht, dass es funktioniert seit NaN == NaN ist falsch; Vermutlich hat meine Version von Pandas eine spezielle Verarbeitung, um NaN zu ersetzen, die dein nicht hat? Ich werde meine Antwort aktualisieren, um dies zu beachten. – Neapolitan

+0

Ich habe "replace (np.NaN, 0)" nochmal versucht und es hat richtig funktioniert. Ich denke, dein Weg hätte funktionieren sollen, denn ich habe den Grund im Moment nicht untersucht, weil ich es eilig habe. Vielen Dank, dass Sie es wissen lassen! –

Verwandte Themen