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