python - 将两个不同数据框中每一行的值相乘

标签 python pandas dataframe genetic-algorithm

我正在构建遗传算法以在 Python 中进行特征选择。我从数据中提取了特征,然后分成两个数据框,“训练”和“测试”数据框。 如何将“人口”数据框(每个 individu)和“火车”数据框中每一行的值相乘?

“训练”数据框:

   feature0   feature1   feature2   feature3   feature4   feature5
0  18.279579  -3.921346  13.611829  -7.250185 -11.773605 -18.265003   
1  17.899545 -15.503942  -0.741729  -0.053619  -6.734652   4.398419   
4  16.432750 -22.490190  -4.611659 -15.247781 -13.941488  -2.433374   
5  15.905368  -4.812785  18.291712   3.742221   3.631887  -1.074326   
6  16.991823 -15.946251   8.299577   8.057511   8.057510  -1.482333

“人口”数据框:

      0     1     2     3     4     5     
0     1     1     0     0     0     1     
1     0     1     0     1     0     0     
2     0     0     0     0     0     1     
3     0     0     1     0     1     1

将“population”中的每一行乘以“train”中的所有行。 它将产生:

1) 从人口第 1 行:

   feature0   feature1   feature2   feature3   feature4   feature5
0  18.279579  -3.921346          0          0          0 -18.265003   
1  17.899545 -15.503942          0          0          0   4.398419   
4  16.432750 -22.490190          0          0          0  -2.433374   
5  15.905368  -4.812785          0          0          0  -1.074326   
6  16.991823 -15.946251          0          0          0  -1.482333

2) 从人口第 2 行:

   feature0   feature1   feature2   feature3   feature4   feature5
0          0  -3.921346          0  -7.250185          0          0
1          0 -15.503942          0  -0.053619          0          0   
4          0 -22.490190          0 -15.247781          0          0   
5          0  -4.812785          0   3.742221          0          0   
6          0 -15.946251          0   8.057511          0          0

等等……

最佳答案

如果需要循环(如果数据大会慢):

for i, x in population.iterrows():
    print (train * x.values)

    feature0   feature1  feature2  feature3  feature4   feature5
0  18.279579  -3.921346       0.0      -0.0      -0.0 -18.265003
1  17.899545 -15.503942      -0.0      -0.0      -0.0   4.398419
4  16.432750 -22.490190      -0.0      -0.0      -0.0  -2.433374
5  15.905368  -4.812785       0.0       0.0       0.0  -1.074326
6  16.991823 -15.946251       0.0       0.0       0.0  -1.482333
   feature0   feature1  feature2   feature3  feature4  feature5
0       0.0  -3.921346       0.0  -7.250185      -0.0      -0.0
1       0.0 -15.503942      -0.0  -0.053619      -0.0       0.0
4       0.0 -22.490190      -0.0 -15.247781      -0.0      -0.0
5       0.0  -4.812785       0.0   3.742221       0.0      -0.0
6       0.0 -15.946251       0.0   8.057511       0.0      -0.0
   feature0  feature1  feature2  feature3  feature4   feature5
0       0.0      -0.0       0.0      -0.0      -0.0 -18.265003
1       0.0      -0.0      -0.0      -0.0      -0.0   4.398419
4       0.0      -0.0      -0.0      -0.0      -0.0  -2.433374
5       0.0      -0.0       0.0       0.0       0.0  -1.074326
6       0.0      -0.0       0.0       0.0       0.0  -1.482333
   feature0  feature1   feature2  feature3   feature4   feature5
0       0.0      -0.0  13.611829      -0.0 -11.773605 -18.265003
1       0.0      -0.0  -0.741729      -0.0  -6.734652   4.398419
4       0.0      -0.0  -4.611659      -0.0 -13.941488  -2.433374
5       0.0      -0.0  18.291712       0.0   3.631887  -1.074326
6       0.0      -0.0   8.299577       0.0   8.057510  -1.482333

或者每一行分开:

print (train * population.values[0])

    feature0   feature1  feature2  feature3  feature4   feature5
0  18.279579  -3.921346       0.0      -0.0      -0.0 -18.265003
1  17.899545 -15.503942      -0.0      -0.0      -0.0   4.398419
4  16.432750 -22.490190      -0.0      -0.0      -0.0  -2.433374
5  15.905368  -4.812785       0.0       0.0       0.0  -1.074326
6  16.991823 -15.946251       0.0       0.0       0.0  -1.482333

或者对于 MultiIndex DataFrame:

d = pd.concat([train * population.values[i] for i in range(population.shape[0])],
               keys=population.index.tolist())
print (d)

      feature0   feature1   feature2   feature3   feature4   feature5
0 0  18.279579  -3.921346   0.000000  -0.000000  -0.000000 -18.265003
  1  17.899545 -15.503942  -0.000000  -0.000000  -0.000000   4.398419
  4  16.432750 -22.490190  -0.000000  -0.000000  -0.000000  -2.433374
  5  15.905368  -4.812785   0.000000   0.000000   0.000000  -1.074326
  6  16.991823 -15.946251   0.000000   0.000000   0.000000  -1.482333
1 0   0.000000  -3.921346   0.000000  -7.250185  -0.000000  -0.000000
  1   0.000000 -15.503942  -0.000000  -0.053619  -0.000000   0.000000
  4   0.000000 -22.490190  -0.000000 -15.247781  -0.000000  -0.000000
  5   0.000000  -4.812785   0.000000   3.742221   0.000000  -0.000000
  6   0.000000 -15.946251   0.000000   8.057511   0.000000  -0.000000
2 0   0.000000  -0.000000   0.000000  -0.000000  -0.000000 -18.265003
  1   0.000000  -0.000000  -0.000000  -0.000000  -0.000000   4.398419
  4   0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -2.433374
  5   0.000000  -0.000000   0.000000   0.000000   0.000000  -1.074326
  6   0.000000  -0.000000   0.000000   0.000000   0.000000  -1.482333
3 0   0.000000  -0.000000  13.611829  -0.000000 -11.773605 -18.265003
  1   0.000000  -0.000000  -0.741729  -0.000000  -6.734652   4.398419
  4   0.000000  -0.000000  -4.611659  -0.000000 -13.941488  -2.433374
  5   0.000000  -0.000000  18.291712   0.000000   3.631887  -1.074326
  6   0.000000  -0.000000   8.299577   0.000000   8.057510  -1.482333

并选择 xs :

print (d.xs(0))

    feature0   feature1  feature2  feature3  feature4   feature5
0  18.279579  -3.921346       0.0      -0.0      -0.0 -18.265003
1  17.899545 -15.503942      -0.0      -0.0      -0.0   4.398419
4  16.432750 -22.490190      -0.0      -0.0      -0.0  -2.433374
5  15.905368  -4.812785       0.0       0.0       0.0  -1.074326
6  16.991823 -15.946251       0.0       0.0       0.0  -1.482333

关于python - 将两个不同数据框中每一行的值相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47301581/

相关文章:

python - 删除空元素但保留零作为值

python - 在没有 for 循环的情况下获取到 1D/2D 中每个最近元素的距离

python - 匹配 2 个数据集之间列中的值,更新多个列

r - 在 R 中将空值转换为 NULL - 处理日期列

python - 从 pandas 中检索键集 字典值系列

python - 使用 Python 在 MS Access 数据库中插入或更新行

python - 当 pandas 是导入时,Cx_freeze TypeError 只能使用 numpy 依赖项连接列表(不是 "NoneType")来列出

python - 将 Pandas 数据框的第一行转换为列名

scala - Spark : Unsupported literal type class scala. collection.immutable.Nil$ List()

python - 从该列的值检索二维 numpy 数组中的列索引