2016-05-14 4 views
1

Angesichts der folgenden Datenrahmen:Pandas Pivot-Tabelle Zählwerte (Ausschließen „NaN“)

import numpy as np 
import pandas as pd 
df = pd.DataFrame({'Site':['a','a','a','b','b','b'], 
        'x':[1,1,0,1,np.nan,0], 
        'y':[1,np.nan,0,1,1,0] 
        }) 

df 

    Site y x 
0 a  1.0 1 
1 a  NaN 1 
2 a  0.0 0 
3 b  1.0 1 
4 b  1.0 NaN 
5 b  0.0 0 

Ich möchte diesen Datenrahmen schwenken, um die Anzahl der Werte zu erhalten (mit Ausnahme von „NaN“) für jeden Säule.

Ich habe versucht, was ich in anderen Posts fand, aber nichts scheint zu funktionieren (vielleicht gab es eine Veränderung in Pandas 0,18)?

Wunschergebnis:

Item count 
Site    
a y  2  
b y  3  
a x  3  
b x  2 

Vielen Dank im Voraus!

+0

Warum brauchen Sie Pivot? 'df.count()' gibt Ihnen die Anzahl (ohne Nans)? – ayhan

+0

Da brauche ich eine Pivot-Tabelle für eine andere Funktion (um den Prozentsatz der Zeilen pro Spalte zu berechnen, die 1 enthalten). –

+0

Können Sie zeigen, wie die resultierende Pivot-Tabelle aussehen würde? – ayhan

Antwort

1
pvt = pd.pivot_table(df, index = "Site", values = ["x", "y"], aggfunc = "count").stack().reset_index(level = 1) 
pvt.columns = ["Item", "count"] 

pvt 
Out[38]: 
    Item count 
Site    
a  x  3 
a  y  2 
b  x  2 
b  y  3 

Sie können pvt.sort_values("Item", ascending = False) hinzufügen, wenn Sie möchten, dass y zuerst erscheint.