Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取连续出现n次的值_Python_Pandas - Fatal编程技术网

Python 获取连续出现n次的值

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 在掩码上计算累计和,以确定存储列中的值保持不变的行块,然

我有一个具有以下结构的数据帧:

用户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
  • 在掩码上计算累计和,以确定存储列中的值保持不变的行块,然后将
    UserId
    上的数据帧与这些块一起分组,并使用
    count
    转换计算用户对每个存储的连续访问次数。现在将连续访问次数与
    3
    进行比较,以创建布尔掩码
    m2
  • 使用
    any
    将在上一步中创建的掩码分组到
    UserId
    transform
    上,以确定用户是否连续至少三次访问了商店中的任何一个
  • 使用
    m2
    和not
    m3
    的逻辑or来过滤行,然后删除重复值,保留每个
    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