Не похоже, что вам нужно использовать functools.reduce
здесь. Достаточно сделать прямой союз с каждой парой морозозонцев.
Если вы хотите максимально возможную скорость для такого рода операций, я рекомендую взглянуть на списки (см. Для циклов с пандами - Когда мне следует позаботиться? для исчерпывающего обсуждения).
df['union'] = [x | y for x, y in zip(df['ID1'], df['ID2'])]
df
ID1 ID2 union
0 (a, b) (c, g) (c, a, b, g)
1 (c, a) (f, i) (c, a, i, f)
2 (c, d) (l, t) (c, l, d, t)
Если вы хотите обобщить это для нескольких столбцов, вы можете объединить их все, используя frozenset.union()
.
df['union2'] = [frozenset.union(*X) for X in df[['ID1', 'ID2']].values]
df
ID1 ID2 union union2
0 (a, b) (c, g) (c, a, b, g) (c, a, b, g)
1 (c, a) (f, i) (c, a, i, f) (c, a, i, f)
2 (c, d) (l, t) (c, l, d, t) (c, l, d, t)