2016-04-26 84 views
0

我有一個尺寸爲array[x][9]的二維數組。因爲它從不同長度的文件中讀取。我想要一次找到數組的每列的總和,但是一次只能找到24列,並將結果輸入到一個新數組中;相當於sum(array2[0:24]),但用於2d陣列。有沒有特別的語法,我只是不知道或者我必須手動執行。我知道,如果它是一維數組我可以做二維數組python的求和部分

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

什麼是二維數組等效,並通過柱做柱遍歷它。我可以想象通過將每列存儲在自己單獨的1d數組中,然後找到總和或for和while循環的混亂。這兩者聽起來都不甚優雅。

+0

...數組的每一列的數目,但在某個時間的24列......你不是指行嗎?因爲'array [x] [9]'意味着只有9列。 – AKS

+0

是的行,我的錯 – Sam

+0

你需要分別爲9列中的每一個的總和? – AKS

回答

2

這聽起來像你可能正在處理時間序列數據,文件包含每小時的值,並且你想要一個每日總和(因此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

請試試這個:

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不是24的倍數,則new_a中的最後一行將具有餘數行的總和(其計數將小於24)。

這也假設a中的值是數字,所以我沒有做任何轉換。