Выберите столбцы дополнения между кадрами - PullRequest
0 голосов
/ 01 ноября 2018

Скажем, у меня есть pandas.DraFrame x, x был передан функции filter и возвратил y, DataFrame с некоторыми столбцами из x удалены. Функция представляет собой черный ящик, и номер столбца большой. Как я могу найти столбцы в «х», которые удалены?

Или, y.columns - это подмножество x.columns, как мне найти столбцы в x, которых нет в y?

Пример:

x = pd.DataFrame(np.array([[1,2,3],[4,5,6]]))
x.columns = list('abc')
y = x.iloc[:, :2].copy()
>>> x
   a  b  c
0  1  2  3
1  4  5  6
>>> y
   a  b
0  1  2
1  4  5

И я бы хотел вернуть столбец c.

Мое решение сейчас:

>>> xc = x.columns.values.tolist()
>>> yc = y.columns.values.tolist()
>>> diff = [i for i in xc if i not in yc]
>>> x[diff]
   c
0  3
1  6

Есть ли способ получить результат без извлечения имен столбцов?

Я думал, что это были какие-то основные операции, но я не мог найти простой ответ в Интернете.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

Использование sets:

x_col = set(x.columns)
y_col = set(y.columns)
x_col.difference(y_col)
>>{'c'}

x_col.difference(y_col) вернет элементы, которые существуют только в x_col, но не в y_col

0 голосов
/ 01 ноября 2018

Вы можете использовать numpy для этого:

import numpy as np

diff = np.setdiff1d(xc,yc)

OR

Но всегда полезно использовать нативные методы:

diff = list(xc - yc)
0 голосов
/ 01 ноября 2018

Используйте sets или панд difference как:

x[x.columns.difference(y.columns)]

Или:

x[list(set(x.columns)-set(y.columns))]

Это даст значения столбцов, которые находятся в x dataframe, но не в y dataframe.


print(x[x.columns.difference(y.columns)])

или

print(x[list(set(x.columns)-set(y.columns))])

   c
0  3
1  6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...