2016-01-31 3 views
0

у меня есть панд dataframe как это ..нарезка панды dataframe с массивом индексов

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

Теперь я могу подмножество в dataframe с массивом такие индексы

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

Вы можете использовать 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 
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 
+0

У меня есть индекс массива не список. Когда я использую ваш код, он дает мне ошибку. 'TypeError: unhashable type: 'numpy.ndarray'' – Neil

+0

В приглашении' [7] 'я настроил его как список, но вы также можете указать индекс массива в виде списка. Для этого используйте 'list (array_index)'. – ericmjl

+0

Возможно, вы захотите перевести весь массив 'array_index' в набор в одну строку, перейдя:' set (list (array_index)) '. С этого момента операции набора - это самый быстрый способ получить дополнение к набору индексов, которые вы не хотите. – ericmjl

Смежные вопросы