Как удалить строки из DataFrame на основе значений в серии - PullRequest
0 голосов
/ 16 февраля 2019

Я знаю, что это простой вопрос, но я просто не могу найти способ его решить.

У меня есть DataFrame, для которого я хочу удалить строки на основе значений в другом series.

X
   1   2   5   6   7   10  12  13
0   5   4   4   4   0   4   0   3
1   3   0   3   0   0   0   0   3
2   4   0   0   0   0   0   0   0
3   3   0   0   0   5   4   5   5
4   3   0   0   0   0   0   0   1 

Vtk
1    4
2    3
4    3
Name: rank, dtype: int64

Я хочу удалить строки из X , которые соответствуют индексу значения a = 3 в Vtk .В этом случае я ожидаю удаления строк из X с индексами 2 и 4 на основе значения a = 3.Например:

X
   1   2   5   6   7   10  12  13
0   5   4   4   4   0   4   0   3
1   3   0   3   0   0   0   0   3
3   3   0   0   0   5   4   5   5

Пока что я пробовал:

b = Vtk.isin([~a])
newX = X.loc[b]

, но есть ошибка IndexingError:

IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match

Есть ли другой способ решить моюпроблема?

1 Ответ

0 голосов
/ 16 февраля 2019

Сначала отфильтруйте значения индекса по Series, а затем удалите строки по DataFrame.drop:

b = Vtk.index[Vtk == 3]
print (b)
Int64Index([2, 4], dtype='int64')

newX = X.drop(b)
print (newX)
   1  2  5  6  7  10  12  13
0  5  4  4  4  0   4   0   3
1  3  0  3  0  0   0   0   3
3  3  0  0  0  5   4   5   5

Другое решение с фильтрацией по isin с~ для обратной маски:

newX = X[~X.index.isin(b)]
print (newX)
   1  2  5  6  7  10  12  13
0  5  4  4  4  0   4   0   3
1  3  0  3  0  0   0   0   3
3  3  0  0  0  5   4   5   5

И решение с выбором по loc - получить значения индексов по difference:

newX = X.loc[X.index.difference(b)]
print (newX)
   1  2  5  6  7  10  12  13
0  5  4  4  4  0   4   0   3
1  3  0  3  0  0   0   0   3
3  3  0  0  0  5   4   5   5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...