2017-10-05 3 views
1

Pour ma base de données, par ex.Valeur booléenne pour une valeur unique dans une colonne

df = pd.DataFrame([1, 3, 7, 1], columns=['data']) 

Je veux savoir pour chaque indice si la valeur est unique dans la colonne data.

Ainsi, la trame de données résultant devrait être

data is_unique 
0 1  False 
1 3  True 
2 7  True 
3 1  False 

est-il une approche pratique avec Pandas?

Répondre

6

utilisation duplicated avec masque interverti par ~:

df['is_unique'] = ~df['data'].duplicated(keep=False) 
print (df) 

    data is_unique 
0  1  False 
1  3  True 
2  7  True 
3  1  False 
+0

wow. Extrêmement propre. Génial. –

+1

C'est la beauté que je cherchais! Merci! –

+0

Vous êtes les bienvenus! Merci a tous. – jezrael

0

En utilisant value_counts + map

df.assign(BOOL=df.data.map(df.data.value_counts()>1)) 
Out[437]: 
    data BOOL 
0  1 True 
1  3 False 
2  7 False 
3  1 True 

En utilisant drop_duplicate

df.assign(BOOL=df.index.isin(df.drop_duplicates('data',keep =False).index)) 

Out[440]: 
    data BOOL 
0  1 False 
1  3 True 
2  7 True 
3  1 False