2017-04-16 1 views
4

Besoin d'aide pour ajouter la combinaison unique de deux colonnes à la même trame de données dans les pandas. Je veux cette colonne "nos".Pandas: Compter des combinaisons distinctes de deux colonnes et les ajouter à Same Dataframe

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 

Voici la sortie Je veux:

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 

Dans l'exemple ci-dessus Id = 1 a seulement 1 acct_nos-1a donc le n ° doit avoir une valeur 1. Id = 3 a seulement 4 acct_nos-3a à 3d donc les nb doivent avoir une valeur 4.

Vous ne savez pas comment mettre cela dans Python Python. Requêtes SQL je peux comprendre.

Merci

Répondre

6

Vous pouvez utiliser groupby.transform avec fonction nunique() pour compter le nombre d'éléments uniques par id:

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

enter image description here

+1

Merci You.It travaillé. – Arpit

2

option 1

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

Option 2
En utilisant 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

Merci PiRsquared d'avoir pris le temps de répondre à cette question. Je n'aurais jamais pensé à autant d'options. – Arpit

+0

@Arpit pas de problème, je pense qu'il est important de montrer la diversité des méthodes qui existent pour résoudre le même problème. – piRSquared