[英]Manual Feature Engineering in Pandas - Mean of 1 Column vs All Other Columns
很难描述这一点,但对于数据框中的每一列,创建一个新列,其中包含当前列的平均值与相邻列的平均值,然后获取第一列与下一行的平均值。 运行 Python 3.6。
例如,给定这个数据框:
我想得到这个输出:
最后添加列的确切顺序并不重要,但它需要能够处理所有列之间的所有可能的均值组合,深度为 2(即,将一列与另一列进行比较)。 理想情况下,我希望将深度设置为一个单独的变量,因此我可以将深度设置为 3,它可以执行此操作但将 3 列相互比较。
想法? 谢谢!
更新
我让它工作了,但想知道是否有一种计算速度更快的方法。 我基本上只是创建了 2 个相同的循环(循环内的循环)来比较 1 列与其余列,跳过相同的列比较:
eng_features = pd.DataFrame()
for col in df.columns:
for col2 in df.columns:
# Don't compare same columns, or inversed same columns
if col == col2 or (str(col2) + '_' + str(col)) in eng_features:
continue
else:
eng_features[str(col) + '_' + str(col2)] = df[[col, col2]].mean(axis=1)
continue
df = pd.concat([df, eng_features], axis=1)
使用itertools
,一个用于迭代器的 Python 内置实用程序包:
from itertools import permutations
for col1, col2 in permutations(df.columns, r=2):
df[f'Mean_of_{col1}-{col2}'] = df[[col1,col2]].mean(axis=1)
你会得到你需要的:
a b c Mean_of_a-b Mean_of_a-c Mean_of_b-a Mean_of_b-c Mean_of_c-a \
0 1 1 0 1.0 0.5 1.0 0.5 0.5
1 0 1 0 0.5 0.0 0.5 0.5 0.0
2 1 1 0 1.0 0.5 1.0 0.5 0.5
Mean_of_c-b
0 0.5
1 0.5
2 0.5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.