Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何高效地跨数据帧进行配对乘法_Python_Pandas_Dataframe_Feature Extraction - Fatal编程技术网

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
处理。这提供了更多的功能好的,这就是我需要的,实际上我两者都需要