【问题标题】:How to group by unique values pandas groupby如何按唯一值分组 pandas groupby
【发布时间】:2020-09-08 12:44:37
【问题描述】:

在我提出问题之前,我希望知道我查看了以下页面,但它没有返回我具体需要的内容:

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

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

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

因为约翰的猜测之一 (231) 和露西的猜测之一 (213) 在所有猜测中是唯一的。最好有一列显示每个人的总猜测数。

提前谢谢你!

【问题讨论】:

    标签: python pandas dataframe group-by unique


    【解决方案1】:

    您可以先通过按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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 2017-05-15
      • 1970-01-01
      相关资源
      最近更新 更多