如何识别两行中的特定事件并计算计数

时间:2017-03-06 20:42:46

标签: python pandas dataframe

我们说我有这两个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循环执行此操作。但是,我想知道是否有更优雅的解决方案。

2 个答案:

答案 0 :(得分:2)

您可以使用shift()检查a是否跟b后面的矢量化&,然后使用sum计算真实数字:

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

#userid type
#0   20    1
#1   21    2

答案 1 :(得分: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