计算频率值在DF内的给定“集合”中出现

时间:2015-10-12 08:40:35

标签: python pandas

我的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()

但是“重复计算”约翰在第三部门所做的销售,所以看起来好像他已经在三个部门而不是两个部门出售

1 个答案:

答案 0 :(得分:3)

您可以在分组前使用DataFrame.drop_duplicates,根据DepartmentID删除重复项。然后根据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