用索引数组切片熊猫数据框

Nei*_*eil 3 python 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
Run Code Online (Sandbox Code Playgroud)

我有一系列的索引

array = np.array([0,1,2,4,7,8])
Run Code Online (Sandbox Code Playgroud)

现在,我可以像这样用数组索引对数据框进行子集化

df.iloc[array]
Run Code Online (Sandbox Code Playgroud)

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

    A  B
0   5  1
1   6  2
2   3  3
4   4  5
7   7  8
8  12  9
Run Code Online (Sandbox Code Playgroud)

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

df.iloc[~loc]

jez*_*ael 5

您可以使用isin与反向的布尔Series通过~

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
Run Code Online (Sandbox Code Playgroud)