每个时间段的汇总测量

时间:2018-12-07 10:07:26

标签: python arrays split

我有一个6 x n的矩阵,其数据为:年,月,日,时,分,使用。 我必须创建一个新的矩阵,其中包含要使用的汇总测量值,其值为“小时”。因此,将同一小时内记录的所有行进行合并。 因此,每次需要几小时的机会代码就会知道一个新的周期。 我只是尝试了一些东西,但现在不解决该问题。 谢谢。这就是我尝试过的+测试

def groupby_measurements(data):
    count = -1
    for i in range(9):
        array = np.split(data, np.where(data[i,3] != data[i+1,3])[0][:1]) 
    return array
print(groupby_measurements(np.array([[2006,2,11,1,1,55],
                             [2006,2,11,1,11,79],
                             [2006,2,11,1,32,2],
                             [2006,2,11,1,41,66],
                             [2006,2,11,1,51,76],
                             [2006,2,11,10,2,89],
                             [2006,2,11,10,3,33],
                             [2006,2,11,14,2,22],
                             [2006,2,11,14,5,34]])))

在这种情况下,我尝试输出为:

                   np.array([[2006,2,11,1,1,55],
                             [2006,2,11,1,11,79],
                             [2006,2,11,1,32,2],
                             [2006,2,11,1,41,66],
                             [2006,2,11,1,51,76]]),  
                   np.array([[2006,2,11,10,2,89],
                             [2006,2,11,10,3,33]]),
                    np.array([[2006,2,11,14,2,22],
                              [2006,2,11,14,5,34]])

最终输出应为:

                   np.array([2006,2,11,1,0,278]),  
                   np.array([2006,2,11,10,0,122]),
                   np.array([2006,2,11,14,0,56])

(三个小时内的总使用量)

1 个答案:

答案 0 :(得分:0)

我建议使用pandas数据框,然后结合使用groupbysum

import pandas as pd
import numpy as np

data = pd.DataFrame(np.array(
    [[2006,2,11,1,1,55],
    [2006,2,11,1,11,79],
    [2006,2,11,1,32,2],
    [2006,2,11,1,41,66],
    [2006,2,11,1,51,76],
    [2006,2,11,10,2,89],
    [2006,2,11,10,3,33],
    [2006,2,11,14,2,22],
    [2006,2,11,14,5,34]]),
    columns=['year','month','day','hour','minute','use'])

aggregated = data.groupby(['year','month','day','hour'])['use'].sum()

# you can also use .agg and pass which aggregation function you want as a string.
aggregated = data.groupby(['year','month','day','hour'])['use'].agg('sum')

year  month  day  hour
2006  2      11   1       278
                  10      122
                  14       56

Aggregated现在是熊猫系列,如果您只是想将其作为数组使用

aggregated.values