Добро пожаловать в SO!
Я предлагаю использовать lambda
построчно (axis=1
):
from itertools import combinations
import pandas as pd
df = pd.DataFrame({'Asset1':('a','e'), 'Asset2': ('b','f'), 'Asset3': ('c', 'g'), 'Asset4': ('d', 'h')})
df['combinations'] = df.apply(lambda r: list(combinations(r, 3)), axis=1)
print(df)
Выход:
Asset1 ... combinations
0 a ... [(a, b, c), (a, b, d), (a, c, d), (b, c, d)]
1 e ... [(e, f, g), (e, f, h), (e, g, h), (f, g, h)]
[2 rows x 5 columns]
Вытакже можете пропустить list(combinations...
, если позже вы будете повторять только комбинации - таким образом вы сэкономите немного памяти и отложите вычисления до момента доступа к df['combinations']
:
df['combinations'] = df.apply(lambda r: combinations(r, 3), axis=1)
print(df)
Тогда вы будетеполучить довольно загадочные объекты в столбце combinations
:
Asset1 ... combinations
0 a ... <itertools.combinations object at 0x0000022392...
1 e ... <itertools.combinations object at 0x0000022392...
[2 rows x 5 columns]