[英]How to group by unique values 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
這將返回每個人與他們自己的猜測相比有多少獨特的猜測。 同樣,我要尋找的是每個人在所有總猜測(也就是整個庫)中有多少個獨特的猜測。 這是我正在尋找的 output:
guess count
name
John 1 2
Lucy 1 2
Mark 0 2
Sally 0 2
因為約翰的猜測之一 (231) 和露西的猜測之一 (213) 在所有猜測中是唯一的。 有一列顯示每個人的總猜測數也很好。
先感謝您!
您可以首先通過按guess
分組找出哪些猜測是唯一的,然后只需對name
進行分組計數和總和即可得到最終的output:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.