如何仅获取每个组的新唯一值?

2024-05-29 03:02:01 发布

您现在位置:Python中文网/ 问答频道 /正文

import pandas as pd

df = pd.DataFrame({'Month': [2, 2, 3, 3],
                   'user': ['Michael', 'Michael', 'Lea', 'Michael']})

我有一个这样的数据框架,它已经是一个按月份分组的结果

   Month     user
0      2  Michael
1      2  Michael
2      3      Lea
3      3  Michael
       

我想要的是统计与前一个月相比的唯一用户总数和新的唯一用户数

总计没有问题,只需使用:

df.groupby(['Month'])['user'].nunique()
Month
2    1
3    2

但我想要的只是新的独特的,我不想在第3个月计算时,计算第2个月已经存在的

在我的最小示例中,“Lea”是第3个月的新用户,“Michael”不是因为他已经是第2个月的用户。因此,我的预期结果将是每月新的独立用户数,如下所示

   Month     Unique_Count_New_Users
0      2     1
1      3     1      <- Lea is new compared to February, Michael isn't
       

如何在python中实现这一点?我是否需要在组之间进行某种元素方面的比较


因此,我在这里编辑以使其更清楚:如果用户已经在那里,我需要与上个月的所有数据进行比较

import pandas as pd

df = pd.DataFrame({'Month':[2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4],
                   'user':['Michael', 'Michael', 'Markus', 'Moritz', 'Lea', 
                           'Michael', 'Stefan', 'Dora', 'Erika',
                           'Dora', 'Markus']})
df
    Month     user
0       2  Michael
1       2  Michael
2       2   Markus
3       2   Moritz
4       2      Lea
5       3  Michael
6       3   Stefan
7       3     Dora
8       3    Erika
9       4     Dora
10      4   Markus
df.groupby(['Month'])['user'].nunique()

# Solution

# Sort the dataframe first

df.sort_values(by='month', inplace=True)

# Duplicated trick

(~df['user'].duplicated()).groupby(df['Month']).sum()

# Result

Month
2    4
3    3
4    0


Tags: 数据用户importdataframepandasdfaspd
1条回答
网友
1楼 · 发布于 2024-05-29 03:02:01

IIUC,你可以使用

(~df['user'].duplicated()).groupby(df['Month']).sum()

演示:

>>> df 
   Month     user
0      2  Michael
1      2  Michael
2      3      Lea
3      3  Michael
>>> (~df['user'].duplicated()).groupby(df['Month']).sum()
Month
2    1
3    1

我假设'Month'列已排序,否则duplicated技巧将不起作用

编辑:您的确切输出可以通过

(~df['user'].duplicated()).groupby(df['Month']).sum().reset_index().rename({'user': 'Unique_Count_New_Users'}, axis=1)

相关问题 更多 >

    热门问题