Как эффективно объединить умножение между кадрами данных - PullRequest
0 голосов
/ 28 августа 2018

Я хочу заняться проектированием объектов с использованием нескольких числовых функций, идея состоит в том, чтобы выполнить умножение пар по всему фрейму данных, предпочтительный ответ - это то, что доступно в библиотеке машинного обучения, например TensorFlow , Keras , TPOT , H20 и т. Д. (Я не знаю научного названия этого процесса), но это прекрасно, если делать это без библиотеки.

Вот мой упрощенный набор данных

No  feature_1  feature_2  feature_3
1          10         20         30
2          20         30         40 

Вот что мне нужно

No  feature_1  feature_2  feature_3  feature_1xfeature2  feature_1xfeature_2  feature_2xfeature_3
1          10         20         30                 200                  300                  600            
2          20         30         40                 600                  800                 1200

Что я сделал

df['feature_1xfeature2'] =  df['feature_1'] * df['feature_2']
df['feature_1xfeature3'] =  df['feature_1'] * df['feature_3']
df['feature_2xfeature3'] =  df['feature_2'] * df['feature_3'] 

Это склонно к ошибкам за массу функций. Как это сделать автоматически?

1 Ответ

0 голосов
/ 28 августа 2018

Вы можете использовать itertools, чтобы получить произведение всех столбцов:

import itertools

for col_a, col_b in itertools.product(df.columns, 2):
    df[col_a + 'x' + col_b] = df[col_a] * df[col_b]

itertools.product(df.columns, 2) создает все комбинации столбцов, если взять 2 элемента из df.columns.

Редактировать

Если рассмотреть вашу проблему более подробно, я думаю, вам лучше использовать itertools.combinations. Это производит не все возможные продукты, но все возможные комбинации.

Пример, предположим, столбцы 'A', 'B', 'C'

itertools.product производит ('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B ',' B '), (' B ',' C '), (' C ',' A '), (' C ',' B '), (' C ',' C ').

itertools.combinations производит ('A', 'B'), ('A', 'C'), ('B', 'C')

Следовательно, это будет работать лучше:

import itertools

for col_a, col_b in itertools.combinations(df.columns, 2):
    df[col_a + 'x' + col_b] = df[col_a] * df[col_b]
...