2017-12-06 11 views
0

Im Folgenden ist ein Beispiel für einen Teil meines Datenrahmen:die Anzahl der gefüllten Zellen zwischen leeren Zellen in Pandas

col1  col2 
items1 10 
items1  5 
items1  3 
items1  2 
items1 NaN 
items1 NaN 
items1 NaN 
items1  4 
items1  1 
items1  1 
items2  6 
items2  4 
items2  5 
items2 NaN 
items2 NaN 
items2  2 
items2  8 
items2  7 
items2  9 
items2 NaN 
... 

ich für jeden eindeutigen Wert muß in Spalte col1 zähle Anzahl der nicht leerer Zellen zwischen leeren Zellen . Ich habe versucht, groupby() zum Gruppieren von eindeutigen Werten in col1 und count() verwenden, um Werte zu zählen, aber es zählen alle nicht leeren Werte für eindeutige Werte in col1.

Hier ist mein Code:

df = pd.DataFrame({'col1':('items1','items1','items1','items1','items1','items1','items1','items1','items1','items1','items2','items2','items2','items2','items2','items2','items2','items2','items2','items2'), 
        'col2': (10, 5, 3, 2, np.nan, np.nan, np.nan, 4, 1, 1, 6, 4, 5, np.nan, np.nan, 2, 8, 7, 9, np.nan)}) 
df.groupby('col1')['col2'].count().reset_index() 

Das Ergebnis sieht wie folgt aus:

 col1 col2 
0 items1  7 
1 items2  7 

Aber ich brauche folgendes zu erhalten:

 col1 col2 
0 items1  4 
1 items1  3 
2 items2  3 
3 items2  4 

Ich wäre dankbar für jede Rat!

Antwort

2

IIUC, PS: Ich habe nicht den Parameter reset_index() wird der Code tooo lang machen ..

df.groupby([df['col1'],df['col2'].isnull().diff().fillna(0).cumsum()])['col2'].count().replace(0,np.nan).dropna() 
Out[885]: 
col1 col2 
items1 0  4.0 
     2  3.0 
items2 2  3.0 
     4  4.0 
Name: col2, dtype: float64 
Verwandte Themen