如何按唯一值分组 pandas groupby
How to group by unique values pandas groupby
在我提出问题之前,我想让大家知道我查看了以下页面,但它没有return我具体需要的内容:
假设我有以下 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
我想知道每个人有多少个完全不同的猜测。也就是说,我不想知道每个人在自己的猜测中有多少个独特的猜测,而是想知道他们在所有猜测中有多少个独特的猜测。让我详细说说。
使用上面链接的 post 中的代码,这就是我得到的:
df.groupby('name')[['guess']].nunique()
guess
name
John 2
Lucy 2
Mark 1
Sally 2
这 return 与他们自己的猜测相比,每个人有多少独特的猜测。同样,我正在寻找的是每个人在所有总猜测(也就是整个猜测)中有多少独特的猜测。这是我正在寻找的输出:
guess count
name
John 1 2
Lucy 1 2
Mark 0 2
Sally 0 2
因为 John 的其中一个猜测 (231) 和 Lucy 的其中一个猜测 (213) 在所有猜测中是唯一的。如果有一个列显示每个人的总猜测数也很好。
提前致谢!
您可以先通过按 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
在我提出问题之前,我想让大家知道我查看了以下页面,但它没有return我具体需要的内容:
假设我有以下 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
我想知道每个人有多少个完全不同的猜测。也就是说,我不想知道每个人在自己的猜测中有多少个独特的猜测,而是想知道他们在所有猜测中有多少个独特的猜测。让我详细说说。
使用上面链接的 post 中的代码,这就是我得到的:
df.groupby('name')[['guess']].nunique()
guess
name
John 2
Lucy 2
Mark 1
Sally 2
这 return 与他们自己的猜测相比,每个人有多少独特的猜测。同样,我正在寻找的是每个人在所有总猜测(也就是整个猜测)中有多少独特的猜测。这是我正在寻找的输出:
guess count
name
John 1 2
Lucy 1 2
Mark 0 2
Sally 0 2
因为 John 的其中一个猜测 (231) 和 Lucy 的其中一个猜测 (213) 在所有猜测中是唯一的。如果有一个列显示每个人的总猜测数也很好。
提前致谢!
您可以先通过按 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