2017-03-06 5 views
2

だが、私はこれらの2つのpandasデータフレームを持っているとしましょう計算するには:私は回数取得したいどのように二列全体に特定のオカレンスを識別し、カウント

id | userid | type 
1 | 20  | a 
2 | 20  | a 
3 | 20  | b 
4 | 21  | a 
5 | 21  | b 
6 | 21  | a 
7 | 21  | b 
8 | 21  | b 

ユーザーごとに「Bは次の」、および

userid | b_follows_a 
20  | 1 
21  | 2 

私はforループを使用してこれを行うことができます知っています。しかし、もっと洗練されたソリューションがあるのだろうかと思います。

aは、その後、ベクトル化 &として bが続いている場合は、 sumとtruesを数えるチェックする shift()を使用することができます

答えて

2

df.groupby('userid').type.apply(lambda x: ((x == "a") & (x.shift(-1) == "b")).sum()).reset_index() 

#userid type 
#0 20 1 
#1 21 2 
+0

ありがとう! – renakre

2

クリエイティブソリューション:

In [49]: df.groupby('userid')['type'].sum().str.count('ab').reset_index() 
Out[49]: 
    userid type 
0  20  1 
1  21  2 

説明:

In [50]: df.groupby('userid')['type'].sum() 
Out[50]: 
userid 
20  aab 
21 ababb 
Name: type, dtype: object 
+0

ありがとう!私はあなたの答えから新しいことを学んだ! – renakre

+0

@renakre、あなたは歓迎です:) – MaxU

関連する問題