gpt4 book ai didi

python - 我如何只获得每组新的唯一值?

转载 作者:行者123 更新时间:2023-12-04 12:21:34 26 4
gpt4 key购买 nike

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

最佳答案

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)

关于python - 我如何只获得每组新的唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69075288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com