我有像这样的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]
答案 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