在DataFrame中乘以多个列

时间:2015-05-15 00:39:49

标签: python pandas

我正在尝试将DataFrame中的 N 列乘以同一DataFrame中的 N 列,然后将结果除以一列。我在第一部分遇到问题,请参见下面的示例。

import pandas as pd
from numpy import random

foo = pd.DataFrame({'A':random.rand(10),
                    'B':random.rand(10),
                    'C':random.rand(10),
                    'N':random.randint(1,100,10),
                    'X':random.rand(10),
                    'Y':random.rand(10),
                    'Z':random.rand(10), })

foo[['A','B','C']].multiply(foo[['X','Y','Z']], axis=0).divide(foo['N'], axis=0)

我想要的是逐列乘法(即A*XB*YC*Z) 结果不是 N 列矩阵,而是 2N 列,其中我想要乘以的列被添加到DataFrame,并且所有条目都有{{ 1}}值,如下:

NaN

这里发生了什么,我如何进行逐列乘法?

1 个答案:

答案 0 :(得分:1)

这将使用X,Y,Z和N列的值,但也许它可以帮助您了解问题所在:

>>> (foo[['A','B','C']]
     .multiply(foo[['X','Y','Z']].values)
     .divide(foo['N'].values, axis=0))
          A         B         C
0  0.000452  0.004049  0.010364
1  0.004716  0.001566  0.012881
2  0.001488  0.000296  0.004415
3  0.000269  0.001168  0.000327
4  0.001386  0.008267  0.012048
5  0.000084  0.009588  0.003189
6  0.000099  0.001063  0.006493
7  0.009958  0.035766  0.012618
8  0.001252  0.000860  0.000420
9  0.006422  0.005013  0.004108

结果在列A,B,C上编制索引。不清楚结果列应该是什么,这就是你获得NaN的原因。

使用.values附加上面的函数将为您提供所需的结果,但是由您来替换索引和列。

>>> (foo[['A','B','C']]
     .multiply(foo[['X','Y','Z']].values)
     .divide(foo['N'].values, axis=0)).values
array([[  4.51754797e-04,   4.04911292e-03,   1.03638836e-02],
       [  4.71588457e-03,   1.56556402e-03,   1.28805803e-02],
       [  1.48820116e-03,   2.95700572e-04,   4.41516179e-03],
       [  2.68791866e-04,   1.16836123e-03,   3.27217820e-04],
       [  1.38648301e-03,   8.26692582e-03,   1.20482313e-02],
       [  8.38762247e-05,   9.58768066e-03,   3.18903965e-03],
       [  9.94132918e-05,   1.06267623e-03,   6.49315435e-03],
       [  9.95764539e-03,   3.57657737e-02,   1.26179014e-02],
       [  1.25210929e-03,   8.59735215e-04,   4.20124326e-04],
       [  6.42175897e-03,   5.01250179e-03,   4.10783492e-03]])