2012-03-28 1 views
3

で列の値を合計する:私はこのようになります行セットを持っているかのpython

私は簡単にcolumn1の、column2の、COLUMN3の合計を取得できるようにしたい
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} 
}) 

。のようなハッシュマップで結果を受け取ることができれば、私は何列でもこれを実行できます。あなたが推測しているように、データベースからの合計値を最初に取得することはできないので、質問する理由があります。

答えて

7
>>> 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}) 

大いに良い方法!

>>> from collections import Counter 
>>> sums = Counter() 
>>> for row in x.values(): 
     sums.update(row) 


>>> sums 
Counter({u'column2': 174, u'column1': 96, u'column3': 58}) 
+3

+1は、明示的には暗黙的であり、コンソールから出力されます。 –

0

最もニシキヘビが、ここではない:

for val in defaultdict.values() : 
    sum1 += val['column1'] 
    sum2 += val['column2'] 
    sum3 += val['column3'] 
final_dict = {'column1' : sum1,'column2' : sum2,'column3' : sum3 } 
2

ネストされた発電機+リスト内包トリックん:私は解決策を提案する可能性がある場合

>>> 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} 
+0

結果をハッシュマップで返しますか? – jamylak

+0

は、@jamylak – Kimvais

0

はここで、別の答えです。まず、データをマトリックスに入れます。次に、行列を1のベクトルで乗算します。

ここで列の合計を取得するには、単にドットプロダクトを使用します。

列ではなく列を積み重ねるには、単に行列を転置します。

np.dot(A.T, np.ones(3)) 
関連する問題