2017-02-01 4 views
1

У меня есть dataframe нижеКак подсчитать количество строк в следующих панд

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

Во-первых, я хотел бы сократить df .с StartsWith ("A")

df1

A B 
1 a0 
2 b0 
3 b1 

df2

A B 
4 a1 
5 b2 

df3

A B 
6 a2 

И я хотел бы сосчитать строки. Подведите итог.

Мой желаемый результат ниже

rows 
a0 3 
a1 2 
a2 1 

Как это можно сделать?

ответ

2

Вы можете преобразовать клетки не начиная с a недостающих значений и вперед заполнить ряд, а затем сделать value_counts:

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

Если дублируется появляются a s, дифференцировать их, вы можете создать дополнительная групповая переменная с 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 
Смежные вопросы