2016-08-17 2 views
1

Je dois prélever un échantillon d'une base de données mais j'ai également besoin des valeurs qui n'appartiennent pas à cet échantillon. Pour examle:Comment trouver les valeurs qui n'appartiennent pas à l'échantillon en Python?

data = [[1,2,3,55], [1,2,34,5], [13,2,3,5], [1,2,32,5], [1,2,22,5]] 
df = DataFrame(data=data, index=[0, 0, 1, 1, 1], columns=['A', 'B', 'C', 'D']) 

Sortie:

In[97]: df.sample(3) 
Out[97]: 

    A B C D 
1 1 2 32 5 
0 1 2 3 55 
1 13 2 3 5 

Comment puis-je atteindre le reste de 2 échantillons? Y a-t-il un moyen fondamental de faire cela?

+0

Les échantillons sont-disponibles en même temps en tant que trame de données? Si c'est le cas, vous devriez pouvoir les inclure dans ce cadre de données. – gustafbstrom

+0

Je ne suis pas sûr de comprendre ce que vous dites. Les échantillons sont tirés de données que j'ai écrites. @gustafbstrom –

Répondre

1

Avec index des doublons, il est problématique, donc besoin reset_index tout d'abord, puis utilisez boolean indexing avec eq ou isin:

df = df.reset_index() 
sam = df.sample(3) 
print (sam) 
    index A B C D 
0  0 1 2 3 55 
1  0 1 2 34 5 
3  1 1 2 32 5 

print ((df.eq(sam, 1)).all(1)) 
0  True 
1  True 
2 False 
3  True 
4 False 
dtype: bool 

print ((df.isin(sam)).all(1)) 
0  True 
1  True 
2 False 
3  True 
4 False 
dtype: bool 

print (df[~(df.isin(sam)).all(1)]) 
    index A B C D 
2  1 13 2 3 5 
4  1 1 2 22 5 

Dernier Index reasign retour:

print (sam.set_index('index').rename_axis(None)) 
    A B C D 
0 1 2 3 55 
0 1 2 34 5 
1 1 2 32 5 

print (df[~(df.isin(sam)).all(1)].set_index('index').rename_axis(None)) 
    A B C D 
1 13 2 3 5 
1 1 2 22 5