как вычислить значение строка за строкой до каждых 60 минут в одном и том же столбце, используя python - PullRequest
0 голосов
/ 04 ноября 2019

Здесь у меня есть набор данных со временем и значением. Поэтому здесь я хочу суммировать значение строка за строкой каждые 60 минут.

date	          x
8/6/2018 6:15	0
8/6/2018 6:20	2.89295
8/6/2018 6:25	2.89295
8/6/2018 6:30	2.89295
8/6/2018 6:35	2.89295
8/6/2018 6:40	2.89295
8/6/2018 6:45	2.89295
8/6/2018 6:50	2.89295
8/6/2018 6:55	2.89295
8/6/2018 7:00	2.89295
8/6/2018 7:05	2.89295
8/6/2018 7:10	2.89295
8/6/2018 7:15	2.89295
8/6/2018 7:20	2.89295
8/6/2018 7:25	2.89295
8/6/2018 7:30	2.89295
8/6/2018 7:35	2.89295
8/6/2018 7:40	2.89295
8/6/2018 7:45	3.155946
8/6/2018 7:50	3.155946
8/6/2018 7:55	3.155946
8/6/2018 8:00	3.155946
8/6/2018 8:05	3.155946
8/6/2018 8:10	3.155946
8/6/2018 8:15	3.155946

ожидаемый результат:

Здесь я хочу добавить каждое значение и значение в каждые пять минут значения суммировать до 60 минут 60 минут.

означает:

date	          x              new_x
8/6/2018 6:15	0                0
8/6/2018 6:20	2.89295          2.89295
8/6/2018 6:25	2.89295          2.89295 + 	2.89295   =   5.7859 
8/6/2018 6:30	2.89295          2.89295 + 	2.89295 + 2.89295 = 8.67885
8/6/2018 6:35	2.89295          2.89295 + 	2.89295 + 2.89295 + 2.89295 = 11.5718
8/6/2018 6:40	2.89295
8/6/2018 6:45	2.89295           like wise till to one hour 
8/6/2018 6:50	2.89295  
8/6/2018 6:55	2.89295
8/6/2018 7:00	2.89295
8/6/2018 7:05	2.89295
8/6/2018 7:10	2.89295
8/6/2018 7:15	2.89295         2.89295 + 	2.89295 + 2.89295 + 2.89295+........=   34.7154  
8/6/2018 7:20	2.89295         2.89295 (after one hour then again another hour , so
                                       then again value will be 2.89295)
                                       it will depend on the value at that time)

Я не знаю, как суммировать это с этим возрастающим значением. Может кто-нибудь помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 05 ноября 2019

Я пытался выяснить, возможно ли это с помощью функций Pandas Grouper и Cumulative Sum, однако я не смог найти способ. Это возможно с жесткой границей в конце часа, например. если вы хотите сбросить сумму в 7:00, а не в 7:15, но не так, как вы хотели. Может быть, кто-то может предложить на этих линиях. Между тем, простое решение с большим количеством кода Python.

Я добавил несколько комментариев, чтобы помочь вам понять это, также предполагается, что вы храните свои данные в DataFrame, а столбец Date установлен как Date, а не как string. В противном случае вам может понадобиться преобразовать строки в дату в цикле ниже.

#Get the first Date and hold its reference
lastDate = dataset.iat[0,0]
#Initialize the sum to 0
cumulativeSum = 0
for i in dataset.index:
    #Find the time difference between this row and the last held Date
    dateDiff = dataset.at[i, 'Date'] - lastDate
    if dateDiff.total_seconds() > 3600:
        #If the difference is more than 60Min then we reset the sum also hold this date as the last reference date
        cumulativeSum = 0
        lastDate = dataset.at[i, 'Date']
    #Add the current value to cumulative sum and store it in our new field
    cumulativeSum = cumulativeSum + dataset.at[i, 'Value']
    dataset.at[i, 'NewX'] = cumulativeSum
print(dataset)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...