2017-09-15 1 views
-1

Est-il possible de compter des valeurs uniques d'une colonne sur plusieurs données avec des pandas?Nombre de valeurs uniques d'une colonne sur plusieurs données

Exemple

columnname dans chaque dataframe qui doit être recherché des valeurs 'userid' uniques valeurs =

df1: 1, 2, 3, 4 df2: 1, 2, 3 df3: 5, 6, 7 output = 7

uniques dans la colonne 'userid' partout dans l'échelle dataframes
Merci!

+0

Ceux-ci ne ressemblent pas à dataframes pour moi. Que diriez-vous de certaines données _real_? –

+0

Ou, est-ce que tous les dataframes ont une colonne userId? –

+0

@JohnGalt Il est vraiment facile de m'appeler ... tapez simplement @c, puis appuyez sur tab. c n'est pas unicode ;-) –

Répondre

1

Accédez à la colonne userId dans toutes les données, puis appelez pd.concat et pd.Series.nunique.

df1 
    userId 
0  1 
1  2 
2  3 
3  4 

df2 
    userId 
0  1 
1  2 
2  3 

df3 
    userId 
0  5 
1  6 
2  7 

series_list = [x['userId'] for x in [df1, df2, df3]] 
count = pd.concat(series_list).nunique() 

count 
7 
1

Numpy peut être rapide, utilisez

In [255]: np.unique(np.hstack([d['userId'].values for d in [df1, df2, df3]])).size 
Out[255]: 7 

minutage

In [251]: [d.shape for d in [df1, df2, df3]] 
Out[251]: [(4000, 1), (3000, 1), (3000, 1)] 

In [253]: %timeit np.unique(np.hstack([d['userId'].values for d in [df1, df2, df3]])).size 
10000 loops, best of 3: 184 µs per loop 

In [254]: %timeit pd.concat([x['userId'] for x in [df1, df2, df3]]).nunique() 
1000 loops, best of 3: 885 µs per loop