Python Groupby统计集合中唯一值的频率
我有一个像这样的DFPython Groupby统计集合中唯一值的频率,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个像这样的DF User Dept 1 Cook 1 Cook 1 Home 2 Sports 2 Travel 2 Cook 我想统计每个部门内的唯一用户: Dept User Cook 2 Home 1 Sports 1 Travel 1 请注意,部门Co
User Dept
1 Cook
1 Cook
1 Home
2 Sports
2 Travel
2 Cook
我想统计每个部门内的唯一用户:
Dept User
Cook 2
Home 1
Sports 1
Travel 1
请注意,部门Cook只有两个用户,因为即使在“Cook”中找到了三个用户,也只有两个唯一的用户
我尝试了以下方法:
df.groupby(['Dept']).count() -- counts 'Cook' three times
df.drop_duplicates(['Dept']).groupby('Dept')['User'].sum() -- over counts all departments
我知道答案是群比,我就是想不出来 您可以使用
nunique
:
>>> df.groupby("Dept")["User"].nunique()
Dept
Cook 2
Home 1
Sports 1
Travel 1
Name: User, dtype: int64
>>> df.groupby("Dept")["User"].nunique().reset_index()
Dept User
0 Cook 2
1 Home 1
2 Sports 1
3 Travel 1
(请注意,我使用了您的示例数据,它在运动中只有一个唯一的用户。)您真的很接近
df.drop_duplicates().groupby('Dept').count()
我想这可能是你想要的。嗨,达格哈,这个方法仍然在计算“库克”三次而不是两次。我需要每个部门的唯一用户数。用.size()
代替.count()
怎么样?这两种方法似乎对我都有效(py2.7,pandas 0.16.2)啊,是的,这很有效——忘记使用nunique了!用python给猫剥皮有很多不同的方法。非常感谢!