Чтобы получить уникальное значение для каждого столбца:
aa = [list(product(np.unique(df1[col1]),
np.unique(df1[col2]),
np.unique(df1[col3])))
for col1, col2, col3 in list(combinations(df1.columns, 3))]
Старый ответ
Сначала мы сгладим вашу матрицу в массив 1d с помощью np.flatten
и получить уникальные значения с помощью np.unique
, затем мы используем itertools.combinations
:
from itertools import combinations
a = np.unique(df1.to_numpy().flatten())
aa = set(combinations(a, 3))
{('a10', 'a11', 'a12'),
('a10', 'a11', 'a13'),
('a10', 'a11', 'a14'),
('a10', 'a11', 'a21'),
('a10', 'a11', 'a23'),
('a10', 'a11', 'a24'),
('a10', 'a11', 'a30'),
('a10', 'a11', 'a33'),
('a10', 'a11', 'a43'),
('a10', 'a11', 'a44'),
('a10', 'a11', 'a51'),
('a10', 'a11', 'a53'),
('a10', 'a12', 'a13'),
('a10', 'a12', 'a14'),
...
Или для фактического получения списков (что менее эффективно):
from itertools import combinations
a = np.unique(df1.to_numpy().flatten())
aa = [list(x) for x in set(combinations(a, 3))]
[['a12', 'a33', 'a51'],
['a11', 'a12', 'a13'],
['a10', 'a11', 'a21'],
['a10', 'a23', 'a24'],
['a12', 'a14', 'a24'],
['a14', 'a43', 'a53'],
['a11', 'a21', 'a53'],
['a10', 'a12', 'a24'],
['a12', 'a21', 'a44'],
['a12', 'a30', 'a51'],
['a14', 'a23', 'a30'],
...