2017-04-16 111 views
4

需要將兩列的唯一組合添加到熊貓中同一數據幀的幫助。 我想要那個「nos」列。熊貓:計算兩列的不同組合並添加到同一數據幀

Input: 
id acct_nos name 
1 1a  one 
1 1a  two 
2 2b  three 
3 3a  four 
3 3b  five 
3 3c  six 
3 3d  seven 

這裏是輸出欲:

Output: 
id acct_nos nos name 
1 1a   1 one 
1 1a   1 two 
2 2b   1 three 
3 3a   4 four 
3 3b   4 five 
3 3c   4 six 
3 3d   4 seven 

在上面的例子 ID = 1僅具有1 acct_nos-1a上的nos必須具有值1 ID = 3具有隻有4個acct_nos-3a到3d所以nos必須有一個值4.

不知道如何把它放在Python Pandas中。我可以找出SQL查詢。

感謝

回答

6

您可以使用groupby.transformnunique()功能,每ID計數獨特元素的個數:

df['nos'] = df.groupby("id")['acct_nos'].transform("nunique") 
df 

enter image description here

+1

謝謝You.It工作。 – Arpit

2

選項1

df.assign(nos=df.id.map(df.drop_duplicates(['id', 'acct_nos']).id.value_counts())) 

選項2
使用Counter

from collections import Counter 

tups = pd.unique(
    zip(df.id.values.tolist(), df.acct_nos.values.tolist()) 
).tolist() 
df.assign(nos=df.id.map(Counter([tup[0] for tup in tups]))) 

    id acct_nos name nos 
0 1  1a one 1 
1 1  1a two 1 
2 2  2b three 1 
3 3  3a four 4 
4 3  3b five 4 
5 3  3c six 4 
6 3  3d seven 4 
+0

謝謝您花時間回答此問題。我從來沒有想過有這麼多的選擇。 – Arpit

+0

@Arpit沒有問題,我認爲顯示解決同一問題的多種方法非常重要。 – piRSquared