Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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_Sum - Fatal编程技术网

如何使用python对列值求和

如何使用python对列值求和,python,sum,Python,Sum,我有一个如下所示的行集: defaultdict(<type 'dict'>, { u'row1': {u'column1': 33, u'column2': 55, u'column3': 23}, u'row2': {u'column1': 32, u'column2': 32, u'column3': 17}, u'row3': {u'column1': 31, u'column2': 87, u'column3': 18} }) defaultdic

我有一个如下所示的行集:

defaultdict(<type 'dict'>, 
{
   u'row1': {u'column1': 33, u'column2': 55, u'column3': 23}, 
   u'row2': {u'column1': 32, u'column2': 32, u'column3': 17}, 
   u'row3': {u'column1': 31, u'column2': 87, u'column3': 18}
})
defaultdict(,
{
u'row1':{u'column1':33,u'column2':55,u'column3':23},
u'row2':{u'column1':32,u'column2':32,u'column3':17},
u'row3':{u'column1':31,u'column2':87,u'column3':18}
})

我希望能够很容易地得到第1列,第2列,第3列的和。如果我可以对任意数量的列执行此操作,并以类似于
columnName=>columnSum
的哈希映射形式接收结果,那就太好了。正如您可能猜到的,首先我不可能从数据库中获得求和值,因此,我提出这个问题的原因是。

不是最具python风格的,但在这里:

>>> from collections import defaultdict
>>> x = defaultdict(dict, 
    {
        u'row1': {u'column1': 33, u'column2': 55, u'column3': 23}, 
        u'row2': {u'column1': 32, u'column2': 32, u'column3': 17}, 
        u'row3': {u'column1': 31, u'column2': 87, u'column3': 18}
    }) 

>>> sums = defaultdict(int)
>>> for row in x.itervalues():
        for column, val in row.iteritems():
            sums[column] += val


>>> sums
defaultdict(<type 'int'>, {u'column1': 96, u'column3': 58, u'column2': 174})
for val in defaultdict.values() :
   sum1 += val['column1']
   sum2 += val['column2']
   sum3 += val['column3']
final_dict = {'column1' : sum1,'column2' : sum2,'column3' : sum3 }

嵌套生成器+列表理解实现了以下功能:

>>> foo
defaultdict(<type 'dict'>, {u'row1': {u'column1': 33, u'column3': 23, u'column2': 55}, u'row2': {u'column1': 32, u'column3': 17, u'column2': 32}, u'row3': {u'column1': 31, u'column3': 18, u'column2': 87}})
>>> dict(zip(foo.values()[0].keys(), [sum(j[k] for j in (i.values() for _,i in foo.items())) for k in range(3)]))
{u'column1': 96, u'column3': 58, u'column2': 174}
>>foo
defaultdict(,{u'row1':{u'column1':33,u'column3':23,u'column2':55},u'row2':{u'column1':32,u'column3':17,u'column2':32},u'row3':{u'column1':31,u'column3':18,u'column2':87})
>>>dict(zip(foo.values()[0].keys(),[sum(j[k]表示j in(i.values(),i in foo.items()),k表示范围(3)])
{u'column1':96,u'column3':58,u'column2':174}

如果我可以提出解决方案,这里还有另一个答案。首先将数据放入矩阵中。然后,将矩阵乘以1的向量

import numpy as np
A = np.random.normal(size = (3,3))
现在要得到列的总和,只需使用点积

np.dot(A, np.ones(3))
要堆叠行而不是列,只需转置矩阵即可

np.dot(A.T, np.ones(3))

在哈希映射中返回结果?+1,表示显式优于隐式,并从控制台输出。
np.dot(A.T, np.ones(3))