Совокупные измерения за период времени - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть матрица 6 xn с данными: год, месяц, день, час, минута, использование.Я должен сделать новую матрицу, содержащую агрегированные измерения для использования, в значении «час».Таким образом, все строки, записанные в течение одного часа, объединяются.Таким образом, каждый раз, когда число часовых шансов, которое необходимо знать коду, начинается новый период.Я только что попробовал, но я не знаю, как это решить.Спасибо.Это то, что я пытался + тест

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

(сумма использования в 3-х часовых периодах)

1 Ответ

0 голосов
/ 07 декабря 2018

Я бы порекомендовал использовать панды Dataframes, а затем использовать groupby в сочетании с sum

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 теперь является серией pandas, если вы хотите использовать его как массив, просто выполните

aggregated.values
...