Python 获取连续出现n次的值
我有一个具有以下结构的数据帧: 用户ID 日期 百货商店 12 01/01/2020 红色 12 01/01/2020 橙色 12 01/01/2020 红色 12 13/01/2020 红色 12 15/02/2020 蓝色 12 20/02/2020 蓝色 12 20/02/2020 蓝色 13 01/01/2020 橙色 13 25/01/2020 橙色 解决方案 解释Python 获取连续出现n次的值,python,pandas,Python,Pandas,我有一个具有以下结构的数据帧: 用户ID 日期 百货商店 12 01/01/2020 红色 12 01/01/2020 橙色 12 01/01/2020 红色 12 13/01/2020 红色 12 15/02/2020 蓝色 12 20/02/2020 蓝色 12 20/02/2020 蓝色 13 01/01/2020 橙色 13 25/01/2020 橙色 解决方案 解释 将Store中的值与上一个值进行比较,以创建布尔掩码m1 在掩码上计算累计和,以确定存储列中的值保持不变的行块,然
- 将
中的值与上一个值进行比较,以创建布尔掩码Store
m1
- 在掩码上计算累计和,以确定存储列中的值保持不变的行块,然后将
上的数据帧与这些块一起分组,并使用UserId
转换计算用户对每个存储的连续访问次数。现在将连续访问次数与count
进行比较,以创建布尔掩码3
m2
- 使用
将在上一步中创建的掩码分组到any
和UserId
上,以确定用户是否连续至少三次访问了商店中的任何一个transform
- 使用
和notm2
的逻辑or来过滤行,然后删除重复值,保留每个m3
UserId的最后一行
m1 = df['Store'] != df['Store'].shift()
m2 = df.groupby(['UserId', m1.cumsum()])['Store'].transform('count').ge(3)
m3 = m2.groupby(df['UserId']).transform('any')
out = df[m2 | ~m3].drop_duplicates('UserId', keep='last')
>>> m1
# 0 True
# 1 True
# 2 True
# 3 False
# 4 True
# 5 False
# 6 False
# 7 True
# 8 False
# 9 True
# 10 True
# Name: Store, dtype: bool
>>> m2
# 0 False
# 1 False
# 2 False
# 3 False
# 4 True
# 5 True
# 6 True
# 7 False
# 8 False
# 9 False
# 10 False
# Name: Store, dtype: bool
>>> m3
# 0 True
# 1 True
# 2 True
# 3 True
# 4 True
# 5 True
# 6 True
# 7 False
# 8 False
# 9 False
# 10 False
# Name: Store, dtype: bool
>>> out
# UserId Date Store
# 6 12 20/02/2020 Blue
# 8 13 25/01/2020 Orange