Учитывая фрейм данных числовых c значений, я хотел бы выполнить плюс, минус, умножение и деление для всех комбинаций столбцов.
Каким будет самый быстрый способ сделать это для комбинаций 3 и выше?
Ниже приведен минимальный воспроизводимый пример с комбинациями 2.
import numpy as np
import pandas as pd
from itertools import combinations
from itertools import permutations
from sklearn.datasets import load_boston
# the dataset
X, y = load_boston(return_X_y=True)
X = pd.DataFrame(X)
combos2 = list(combinations(X.columns,2))
perm3 = list(permutations(X.columns,3)) # how would i do this with out typing out all the permutations
for i in combos2:
X[f'{i[0]}_X_{i[1]}'] = X.iloc[:,i[0]]*X.iloc[:,i[1]] # Multiply
X[f'{i[0]}_+_{i[1]}'] = X.iloc[:,i[0]]+X.iloc[:,i[1]] # Add
X[f'{i[0]}_-_{i[1]}'] = X.iloc[:,i[0]]-X.iloc[:,i[1]] # Subtract
X[f'{i[0]}_/_{i[1]}'] = X.iloc[:,i[0]]/(X.iloc[:,i[1]]+1e-20) # Divide
Я думал о способе добавить "операторы + * - /" в комбинации, чтобы его можно записать в меньшем количестве строк, чем вводить все комбинации вручную, но я не знаю, с чего начать?
Мне нужны все заказы: т.е. (a * b + c), (a * b - c), (a * b / c) et c
В идеале не оставлять повторяющихся столбцов, т.е. (a + b + c) и (c + b + a)
Например, если бы у меня было 3 столбца ab c. Мне нужен новый столбец (a * b + c).