Python 如何高效地跨数据帧进行配对乘法
我想使用多个数字特征进行特征工程,其思想是跨数据帧进行成对乘法,首选答案是机器学习库中提供的内容,例如,,,等等(我不知道这个过程的学名),但在没有库的情况下也可以这样做 这是我的简化数据集Python 如何高效地跨数据帧进行配对乘法,python,pandas,dataframe,feature-extraction,Python,Pandas,Dataframe,Feature Extraction,我想使用多个数字特征进行特征工程,其思想是跨数据帧进行成对乘法,首选答案是机器学习库中提供的内容,例如,,,等等(我不知道这个过程的学名),但在没有库的情况下也可以这样做 这是我的简化数据集 No feature_1 feature_2 feature_3 1 10 20 30 2 20 30 40 这是我需要的 No feature_1 feature_2 feature_3
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']
这很容易导致大量功能出错。如何自动执行此操作?您可以使用
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)
从df.columns中获取2项时,将生成所有列的组合
编辑
更详细地看一下您的问题,我认为您最好使用itertools.compositions
。这并不是产生所有可能的产品,而是产生所有可能的组合
例如,假设列“A”、“B”、“C”
itertools.product
生产('A','A','B','A','C','B','A','B','B','B','B','C','C','C','C','C','C','C')
itertools.compositions
产生('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]
还有其他更专业的方法可以自动完成。例如,
多项式特征
:
import pandas as pd
from sklearn.preprocessing import PolynomialFeatures
# original data
df = pd.DataFrame(data = [[1, 10, 20, 30], [2, 20, 30, 40]], columns = ['No', 'feature_1', 'feature_2', 'feature_3'])
# selecting features to use for features generation
seed_feature_names = ['feature_1', 'feature_2', 'feature_3']
seed_features = pd.DataFrame(data = df[seed_feature_names], columns=seed_feature_names)
# actual features generation
poly = PolynomialFeatures(interaction_only=True, include_bias=False)
df_enhanced = pd.DataFrame(data = poly.fit_transform(seed_features), columns=poly.get_feature_names(seed_features.columns))
所以,
itertools.product
对排列有用吗?如果我使用减法或除法,itertools
库是为了高效地迭代值而构建的。itertools.product
方法确实用于查找所有置换。我的示例代码中的乘法用作您的示例,但您也可以使用减法或除法编写,例如,对于减法:df[col\u a+'-'+col\u b]=df[col\u a]-df[col\u b]
。如果您想对存储在每列中的数组进行更精细的处理,可以使用df['].value并将其作为numpy.array
处理。这提供了更多的功能好的,这就是我需要的,实际上我两者都需要