如何在Python中找到不属于样本的值?

时间:2016-08-17 11:00:49

标签: python pandas indexing dataframe sample

我需要从数据框中提取样本,但我还需要不属于该样本的值。例如:

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'])

输出:

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

如何到达其余2个样本?有没有基本的方法呢?

1 个答案:

答案 0 :(得分:1)

使用重复索引会产生问题,因此首先需要reset_index,然后将boolean indexingeqisin一起使用:

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

最后重新签名索引:

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