Python 在所有可能的变量组合中创建新的列/属性

标签 python numpy pandas dataframe

如果我有一个包含变量 A、B、C、D、E 的数据框,我如何创建一个 for 或 while 循环来创建变量,方法是使用所有变量和所有可能的数学运算符对现有变量进行所有可能的组合 ( +,-,/,*)?

从具有以下变量的数据框开始:

A B C D E

像这样:

A B C D E A+B A+C A+D A+E A*B ...

最佳答案

解决方案

你想使用numpy

import numpy as np

vars = [1, 2, 3]

np.concatenate([
        np.add.outer(vars, vars),
        np.subtract.outer(vars, vars),
        np.multiply.outer(vars, vars),
        np.divide.outer(vars, vars)]).flatten()

看起来像:

array([ 2,  3,  4,  3,  4,  5,  4,  5,  6,  0, -1, -2,  1,  0, -1,  2,  1,
        0,  1,  2,  3,  2,  4,  6,  3,  6,  9,  1,  0,  0,  2,  1,  0,  3,
        1,  1])

说明

# All possible additions
print np.add.outer(vars, vars)

# All possible subtractions
print np.subtract.outer(vars, vars)

# All possible multiplications
print np.multiply.outer(vars, vars)

# All possible divisions
print np.divide.outer(vars, vars)

看起来像这样:

[[2 3 4]
 [3 4 5]
 [4 5 6]]

[[ 0 -1 -2]
 [ 1  0 -1]
 [ 2  1  0]]

[[1 2 3]
 [2 4 6]
 [3 6 9]]

[[1 0 0]
 [2 1 0]
 [3 1 1]]

关于Python 在所有可能的变量组合中创建新的列/属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37194813/

相关文章:

python - 如何pickle numpy MaskedArray子类

python - 如何在Ubuntu上使用多个版本的NLTK?

Python索引不止一次

python - Numpy 索引超出范围错误

python - numpy 数组中的多个累积和

python - Pandas 的前一组均值变化

python - 如何在 TensorFlow 中进行 Argsort?

python - Pandas 。 2 列数据框。获取交集矩阵(全部到全部,来自第 #1 列)

python - 子图和颜色的不同变量的 Pandas 图?

python-3.x - 多索引 Pandas DataFrame 上的滚动窗口百分位数排名