使用索引数组

时间:2016-01-31 04:27:54

标签: python pandas

我有像这样的pandas数据框..

df = pd.DataFrame({'A' : [5,6,3,4,4,5,6,7,12,13], 'B' : 
     [1,2,3,5,5,6,7,8,9,10,]})

df

    A   B
0   5   1
1   6   2
2   3   3
3   4   5
4   4   5
5   5   6
6   6   7  
7   7   8
8  12   9
9  13  10

我有一系列索引

array = np.array([0,1,2,4,7,8])

现在,我可以使用像

这样的数组索引对数据帧进行子集化
df.iloc[array]

这给了我一个数据框,其中索引存在于数组中。

    A  B
0   5  1
1   6  2
2   3  3
4   4  5
7   7  8
8  12  9

现在我想要数组索引中不存在的所有行,我想要的行索引是[3,5,6,9] 我试图做这样的事情,但它给了我一个错误。

df.iloc[~loc]

2 个答案:

答案 0 :(得分:4)

您可以使用isin通过~反转布尔import pandas as pd import numpy as np df = pd.DataFrame({'A' : [5,6,3,4,4,5,6,7,12,13], 'B' : [1,2,3,5,5,6,7,8,9,10,]}) print df A B 0 5 1 1 6 2 2 3 3 3 4 5 4 4 5 5 5 6 6 6 7 7 7 8 8 12 9 9 13 10 array = np.array([0,1,2,4,7,8]) print array [0 1 2 4 7 8] print df.index.isin(array) [ True True True False True False False True True False] print ~df.index.isin(array) [False False False True False True True False False True] print df[ ~df.index.isin(array)] A B 3 4 5 5 5 6 6 6 7 9 13 10

{{1}}

答案 1 :(得分:1)

使用套装:

In [7]: wanted = [0, 1, 2, 4, 7, 8]

In [8]: not_wanted = set(df.index) - set(wanted)

In [9]: not_wanted
Out[9]: {3, 5, 6, 9}

In [11]: not_wanted = list(not_wanted)

In [12]: not_wanted
Out[12]: [9, 3, 5, 6]

In [13]: df.iloc[not_wanted]
Out[13]: 
    A   B
9  13  10
3   4   5
5   5   6
6   6   7