2015-10-12 67 views
2

我有一個DF,看起來像這樣:計數一個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部中,他只出現在兩個部門中,而吉姆出現在三個部門中,但只在兩個部門中銷售)。

我完全甩掉我的大腦如何實現這一點,因爲我試過了groupby沒有成功的每一個可能的排列組合。任何幫助?

編輯:最近我一直在使用類似

df.groupby(['ID']).sum() 

但「雙數」約翰部門作出的銷售來3次,以它使它看起來好像他在三個部門已經售出,而不是隻有兩個

+0

你想那些'0'值呢? –

+0

是的,Bob和Janet需要有零個 – user3682157

+0

是的,它是一個二元變量 – user3682157

回答

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 
相關問題