我的df看起来像这样:
Department ID Sale
1 Jim 1
1 Sue 1
1 John 1
2 Bob 0
2 Janet 0
2 Jim 0
3 John 1
3 John 1
3 Jim 1
我想做什么 我想计算一个特定名称出现在该部门内的销售部门的数量。这有点令人困惑,所以用我期望的输出更好地说明:
ID #ofDepartments
Jim 2
Sue 1
John 2
Bob 0
Janet 0
请注意,约翰和吉姆的名字旁边都有两个,因为他们都在两个不同的部门进行了销售(尽管约翰在第3部分和第1部分进行了两次销售,但他只出现在两个部门中,而Jim出现在三个部门,但只有两个销售)。
我正在完全绞尽脑汁如何实现这一点,因为我已经尝试了所有可能的组合排列而没有成功。有什么帮助吗?
编辑:我最接近的是使用像
这样的东西 df.groupby(['ID']).sum()
但是“重复计算”约翰在第三部门所做的销售,所以看起来好像他已经在三个部门而不是两个部门出售
答案 0 :(得分:3)
您可以在分组前使用DataFrame.drop_duplicates
,根据Department
和ID
删除重复项。然后根据ID
进行分组,然后选择sum()
。示例 -
df.drop_duplicates(['Department','ID']).groupby('ID')['Sale'].sum()
演示 -
In [68]: df
Out[68]:
Department ID Sale
0 1 Jim 1
1 1 Sue 1
2 1 John 1
3 2 Bob 0
4 2 Janet 0
5 3 John 1
6 3 John 1
7 3 Jim 1
8 3 Peggy 1
In [69]: df.drop_duplicates(['Department','ID']).groupby('ID')['Sale'].sum()
Out[69]:
ID
Bob 0
Janet 0
Jim 2
John 2
Peggy 1
Sue 1
Name: Sale, dtype: int64