python - 计算 python 中某个值相对于另一个值聚合的重复出现次数

标签 python pandas loops count logic

这个问题是我问的这个问题的延续 here :

现在我有这样的数据:

Sno   User  Cookie
 1     1       A
 2     1       A
 3     1       A
 4     1       B
 5     1       C
 6     1       D
 7     1       A
 8     1       B
 9     1       D
 10    1       E
 11    1       D
 12    1       A
 13    2       F
 14    2       G
 15    2       F
 16    2       G
 17    2       H
 18    2       H

假设我们有用户 1“A、B、C、D、E”的 5 个 Cookie。现在我想统计遇到新的 cookie 后是否有任何 cookie 再次出现。例如,在上面的例子中,cookie A 在第 7 个位置再次遇到,然后也在第 12 个位置遇到。注意:我们不会将 A 计入第二位,因为它同时出现,但在第七位和第 12 位,我们在再次看到 A 之前看到了许多新的 cookie,因此我们计入该实例。因此,如果我运行 previous post 中提到的代码,我将得到以下结果: :

对于用户 1

Sno Cookie  Count
 1    A     2
 2    B     1
 3    C     0
 4    D     2
 5    E     0

对于用户2

Sno Cookie  Count
 6    F     1
 7    G     1
 8    H     0

现在到了棘手的部分,现在我们通过计数知道,对于用户 1,三个 cookie“A、B 和 D”重新出现。类似地,对于用户 2,“F 和 G”再次出现。我想像这样汇总这些结果:

Sno User Reoccurred_Instances
 1   1    3
 2   2    2

有没有更简单的方法而不使用循环来获得这个结果。

最佳答案

按照与我回答上一个问题时相同的第一步,删除连续的 Cookie 值并查找重复项:

no_doubles = df[df.Cookie != df.Cookie.shift()]

no_doubles['dups'] = no_doubles.Cookie.duplicated()

然后使用 groupby 按 User 对确实重复的数据子集 (no_doubles[no_doubles['dups']]) 进行分组,并找到数字使用 nunique 为每个用户提供唯一的 Cookie:

no_doubles[no_doubles['dups']].groupby('User')['Cookie'].nunique().reset_index()

这将返回:

   User  Cookie
0     1       3
1     2       2

您可以根据需要重命名列

[编辑]:

要处理不同的情况,您只需添加此逻辑即可。例如,考虑以下数据帧,User 编号 3 中没有重复:

Sno   User  Cookie
 1     1       A
 2     1       A
 3     1       A
 4     1       B
 5     1       C
 6     1       D
 7     1       A
 8     1       B
 9     1       D
 10    1       E
 11    1       D
 12    1       A
 13    2       F
 14    2       G
 15    2       F
 16    2       G
 17    2       H
 18    2       H
 18    3       H
 18    3       I
 18    3       J

你可以这样做:

no_doubles = df[(df.Cookie != df.Cookie.shift()) | (df.User != df.User.shift())]

no_doubles['dups'] = no_doubles.duplicated(['Cookie', 'User'])

no_doubles.groupby('User').apply(lambda x: x[x.dups]['Cookie'].nunique()).to_frame('Reoccurred_Instances')

获取:

      Reoccurred_Instances
User                      
1                        3
2                        2
3                        0

关于python - 计算 python 中某个值相对于另一个值聚合的重复出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52083723/

相关文章:

python - 在 Google Colab : AttributeError: ‘PosixPath’ object has no attribute ‘ls’ 中使用 pathlib

python - 使用其他元素的总和分配列表元素

python - 如何根据数组中的特征的大小来标记特征?

Python Pandas 将多列合并为一个字典列

python - 使用 apply() 函数在 pandas.DataFrame 中创建新列

java - 在Java中,我如何创建循环遍历二维数组,并在找到某个值时打印一行然后退出循环?

python - 使用堆栈的 Hanoi Python 解决方案的递归塔

java - 如何创建一个循环来计算一个特定数字可以安装在另一个特定数字中的次数?

arrays - $firebaseArray 中的 For 循环

python - 将随机数据字符串插入新的数据框列