Нахождение дельты в трех перекрывающихся наборах в python

1
x = [1,2,3,4,5,6,7]
y = [2,1,4,5,8,10]
z = [7,1,3,6,0]

Как я могу найти все элементы в диаграмме Венна этих трех списков (или я могу даже работать с наборами)

Изображение 174551

Я работаю с DataFrames размером 500-1000. Я попытался использовать условные подмножества Dataframes. Есть ли в python более простой и менее сложный метод? Я открыт для наборов, массивов numpy или даже списков.

Теги:
pandas
numpy
set

2 ответа

4
Лучший ответ

Дано:

x = [1,2,3,4,5,6,7]
y = [2,1,4,5,8,10]
z = [7,1,3,6,0]

Пытаться:

x = set([1,2,3,4,5,6,7])
y = set([2,1,4,5,8,10])
z = set([7,1,3,6,0])

Затем вы можете найти пересечения:

xy = x.intersection(y)
xyz = x.intersection(y).intersection(z)
# and
xyz = x & y & z

См. Также: https://docs.python.org/2/library/sets.html#set-объекты

Все дельт:

Я использовал соглашение 'x_' для 'NOT in x'

x_y_z = z.difference(x).difference(y)
x_yz_ = y.difference(x).difference(z)
x_yz = y.intersection(z).difference(x)
xy_z_ = x.difference(y).difference(z)
xy_z = x.difference(y).intersection(z)
xyz_ = x.intersection(y).difference(z)
xyz = x.intersection(y).intersection(z)
  • 0
    Спасибо, как бы я нашел, xy'z '?
  • 0
    x.difference (у). Я понял! Благодарю. Я отредактирую ваш ответ со всеми комбинациями. Так что этот пост завершен
Показать ещё 1 комментарий
0

Взяв из ответа @PascalVKooten, я написал код, чтобы найти все дельта между любыми тремя наборами.

Все дельт:

Я использовал соглашение 'x_' для 'NOT in x'

x_y_z = z.difference(x).difference(y)
x_yz_ = y.difference(x).difference(z)
x_yz = y.intersection(z).difference(x)
xy_z_ = x.difference(y).difference(z)
xy_z = x.difference(y).intersection(z)
xyz_ = x.intersection(y).difference(z)
xyz = x.intersection(y).intersection(z)

Проверьте код, используя: Пересечение каждого результирующего набора должно быть нулевым.

x_y_z.intersection(x_yz_).
intersection(x_yz).\
intersection(xy_z).\
intersection(xy_z_).\
intersection(xy_z).\
intersection(xyz_).\
intersection(xyz)
  1. Союз результирующих множеств должен быть равен объединению трех множеств.

    x_y_z.union(x_yz _). union (x_yz).union(xy_z _). union (xy_z).union(xyz _).\union (xyz) == x.union(y).union(z) '

Ещё вопросы

Сообщество Overcoder
Наверх
Меню