如何按唯一值分组分组

2024-04-28 23:52:31 发布

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

在我提问之前,我希望大家知道,我看了下一页,但没有返回我需要的具体内容:

Count unique values using pandas groupby

假设我有以下四个人试图猜代码的df。每个人都有两个猜测:

df = pd.DataFrame({'name':['Sally', 'John', 'Lucy', 'Mark','Sally', 'John', 'Lucy', 'Mark'], 
                   'guess':['123', '321', '213', '312', '321', '231', '123', '312']})

df

    name    guess
0   Sally   123
1   John    321
2   Lucy    213
3   Mark    312
4   Sally   321
5   John    231
6   Lucy    123
7   Mark    312

我想知道每个人有多少完全独特的猜测。也就是说,我不想知道每个人在自己的猜测中有多少独特的猜测,而是想知道他们在所有猜测中有多少独特的猜测。让我详细说明一下

使用上面链接的帖子中的代码,我得到的是:

df.groupby('name')[['guess']].nunique()


      guess
name    
John    2
Lucy    2
Mark    1
Sally   2

这将返回每个人与他们自己的猜测相比的唯一猜测数。同样,我要寻找的是每个人在所有猜测中有多少独特的猜测(也就是整个coulmn)。这是我正在寻找的输出:

      guess count
name    
John    1     2
Lucy    1     2
Mark    0     2
Sally   0     2

因为约翰的一个猜测(231)和露西的一个猜测(213)在所有猜测中都是独一无二的。如果有一个列显示每个人的总猜测数也会很好

提前谢谢你


Tags: 代码namepandasdfcountjohnsallyunique
1条回答
网友
1楼 · 发布于 2024-04-28 23:52:31

通过按guess分组,您可以首先找出哪些猜测是唯一的,然后只需对name进行分组计数和求和,然后即可获得最终输出:

In [64]: df['unique'] = df['guess'].map(df.groupby("guess").count()['name'] == 1).astype(int)

In [65]: df.groupby("name")['unique'].agg(['sum', 'count']).rename(columns={'sum': 'guess'})
Out[65]:
       guess  count
name
John     1      2
Lucy     1      2
Mark     0      2
Sally    0      2

相关问题 更多 >