2017-02-01 2 views
1

Ich habe Datenrahmen unterWie die Anzahl der folgenden Zeilen in Pandas zählen

A B 
1 a0 
2 b0 
3 b1 
4 a1 
5 b2 
6 a2 

Zuerst würde ich df .mit starts schneiden möchte ("a")

df1

A B 
1 a0 
2 b0 
3 b1 

df2

A B 
4 a1 
5 b2 

df3

A B 
6 a2 

Und ich möchte die Zeilen zählen. Und fassen Sie das Ergebnis zusammen.

Mein gewünschtes Ergebnis ist unter

rows 
a0 3 
a1 2 
a2 1 

Wie dies geschehen kann?

Antwort

2

Sie mit a zu fehlenden Werten Ausgangszellen nicht und vorwärts füllen die Serie umwandeln kann und dann tun value_counts:

df.B.where(df.B.str.startswith("a"), None).ffill().value_counts() 
​ 
#a0 3 
#a1 2 
#a2 1 
#Name: B, dtype: int64 

Wenn Sie a s erscheinen, vervielfältigt haben sie zu unterscheiden, können Sie erstellen eine zusätzliche Gruppenvariable mit cumsum:

start_a = df.B.str.startswith("a") 
df.groupby(by = [df.B.where(start_a, None).ffill(), start_a.cumsum().rename('g')]).size() 

#B g  # here is an extra group variable to differentiate possible duplicated a rows 
#a0 1 3 
#a1 2 2 
#a2 3 1 
#dtype: int64 
Verwandte Themen