2016-04-26 22 views
0

私は次元がarray[x][9]の2次元配列を持っています。 Xはさまざまな長さのファイルから読み込むためです。私は、配列の各列の合計を一度に24列分求め、結果を新しい配列に入力したいと思います。 sum(array2[0:24])に相当しますが、2次元アレイの場合は。私はちょうど知っていないか、または私はそれを手動で行う必要がある特別な構文があります。それは私が2次元配列pythonのサマリーセクション

for x in range(len(array)/24): 
    total.append(sum(array2[x1:x24])) # so i get an array of the sums 

2次元配列し、それを列ごとに行うための同等とは何かをすることによって、それを反復処理でき1D配列だった場合、私は知っています。私は、それ自身の別の1d配列に各列を格納してから、その和を見つけることや、forループとwhileループを混乱させることで、これを行うことができます。どちらも少しエレガントではありません。

+0

...配列の各列の_sumは、一度に24列のために...行を意味しないのですか?なぜなら、 'array [x] [9]'は9列しかないからです。 – AKS

+0

はい行、私の間違い – Sam

+0

9列ごとに合計が必要ですか? – AKS

答えて

2

時系列データを扱っているようですが、時間単位の値が含まれており、1日の合計が必要です(したがって、24)。パンダライブラリは本当にうまくこれを行います。

あなたはdata.csvにデータがあるとします。

import pandas 
df = pandas.read_csv('data.csv') 

あなたのコラムの一つは、あなたがそれを使用することができ、タイムスタンプだった場合、あなたは生データのみを持っている場合は、あなたは時間インデックスを作成することができます。

df.index = pandas.date_range(pandas.datetime.today().date(), 
          periods=df.shape[0], freq='H') 

日常的にすべての列の合計は非常に簡単です:

daily = df.resample('D').apply(sum) 
+0

これはまさにそれです。最小限の労力でタイムスタンプを取得できます。 – Sam

2

あなたの配列を転置し、個別に各列を合計する理解を使用するzipを使用することができます。

>>> array = [[1, 2, 3], [10, 20, 30], [100, 200, 300]] 
>>> [sum(a) for a in zip(*array)] 
[111, 222, 333] 
+0

列を合計するのは難しい部分です.24時には問題があります。 – Sam

+0

@Sam答えのコードは、一定数の列に対して有効です。 –

1

これを試してください:24の倍数が、その後はない

x = len(a) # x is the length of a 

step = 24 

# get the number of iterations you need to do 
n = int(math.ceil(float(x)/step)) 


new_a = [map(lambda k: sum(list(k)), zip(*a[i * step:(i + 1) * step])) 
     for i in range(0, n)] 

x場合new_aの最後の行は残りの行の合計を持ちます(その数は24より少なくなります)。

これはまた、aの値が数値であると仮定しているため、変換は一切行っていません。