python - 条件分组 CumCount 熊猫
问题描述
我有这个数据框:
dic = {'users' : ['A','A','B','A','A','B','A','A','A','A','A','B','A'],
'product' : [1,1,2,2,1,2,1,2,1,1,2,1,1],
'action' : ['see', 'see', 'see', 'see', 'buy', 'buy', 'see', 'see', 'see', 'see', 'buy', 'buy', 'buy']
}
df = pd.DataFrame(dic, columns=dic.keys())
df
users product action
0 A 1 see
1 A 1 see
2 B 2 see
3 A 2 see
4 A 1 buy
5 B 2 buy
6 A 1 see
7 A 2 see
8 A 1 see
9 A 1 see
10 A 2 buy
11 B 1 buy
12 A 1 buy
我需要一个列来计算每个用户在购买产品之前看到了多少次。
结果应该是这样的:
dic = {'users' : ['A','A','B','A','A','B','A','A','A','A','A','B','A'],
'product' : [1,1,2,2,1,2,1,2,1,1,2,1,1],
'action' : ['see', 'see', 'see', 'see', 'buy', 'buy', 'see', 'see', 'see', 'see', 'buy', 'buy', 'buy'],
'see_before_buy' : [1,2,1,1,2,1,1,2,2,3,2,0,3]
}
users product action see_before_buy
0 A 1 see 1
1 A 1 see 2
2 B 2 see 1
3 A 2 see 1
4 A 1 buy 2
5 B 2 buy 1
6 A 1 see 1
7 A 2 see 2
8 A 1 see 2
9 A 1 see 3
10 A 2 buy 2
11 B 1 buy 0
12 A 1 buy 3
有人可以帮我吗?
解决方案
您可能需要groupby
使用cumsum
after创建一个附加密钥shfit
addkey=df.groupby(['user','#product']).action.apply(lambda x : x.eq('buy').shift().fillna(0).cumsum())
df['seebefore']=df.action.eq('see').groupby([df.user,df['#product'],addkey]).cumsum()
df
Out[131]:
index user #product action seebefore
0 0 A 1 see 1.0
1 1 A 1 see 2.0
2 2 B 2 see 1.0
3 3 A 2 see 1.0
4 4 A 1 buy 2.0
5 5 B 2 buy 1.0
6 6 A 1 see 1.0
7 7 A 2 see 2.0
8 8 A 1 see 2.0
9 9 A 1 see 3.0
10 10 A 2 buy 2.0
11 11 B 1 buy 0.0
12 12 A 1 buy 3.0
推荐阅读
- android - 4K分辨率Android设备中的额外间距问题
- android - ScrollView 内的 View 中的 OnTouchListener
- druid - Druid:缓存查找失败,因为在摄取期间“找到 Null 或 Empty Dimension”
- c# - 如何在 Linq Select 语句中将函数作为表达式传递?
- mysql - 如何通过产品 ID 获取不同的状态计数
- c - 如何计算比赛?
- django - django 自定义保存方法以更改默认数据库
- angular - 路由器历史中的 Ionic 4/Angular 循环
- python - 如何在 gRPC 客户端-服务器框架上强制进行多处理以进行网络爬取?
- algorithm - DBSCAN/OPTICS 算法中是否包含半径 epsilon?