Повторная выборка с нерегулярными интервалами - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть регулярно разнесенные временные ряды, хранящиеся во фрейме данных Pandas:

1998-01-01 00:00:00 5,71

1998-01-01 12:00:00 5.73

1998-01-02 00:00:00 5,68

1998-01-02 12:00:00 5,69 ...

У меня также есть список дат, которые расположены нерегулярно:

1998-01-01

1998-07-05

1998-09-21 ....

Я хотел бы рассчитать среднее значение временного ряда между каждым временным интервалом в списке дат. Возможно ли это как-то с помощью pandas.DataFrame.resample? Если нет, то какой самый простой способ сделать это?

Отредактировано: Например, вычислите среднее значение «серии» между датами в «датах», созданных с помощью следующего кода:

import pandas as pd
import numpy as np
import datetime

rng = pd.date_range('1998-01-01', periods=365, freq='D')
series = pd.DataFrame(np.random.randn(len(rng)), index=rng)

dates = [pd.Timestamp('1998-01-01'), pd.Timestamp('1998-07-05'), pd.Timestamp('1998-09-21')]

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Вы можете циклически проходить по датам и использовать для выбора только те строки, которые попадают между этими датами, например:

import pandas as pd
import numpy as np
import datetime

rng = pd.date_range('1998-01-01', periods=365, freq='D')
series = pd.DataFrame(np.random.randn(len(rng)), index=rng)

dates = [pd.Timestamp('1998-01-01'), pd.Timestamp('1998-07-05'), pd.Timestamp('1998-09-21')]

for i in range(len(dates)-1):

    start = dates[i]
    end = dates[i+1]

    sample = series.loc[(series.index > start) & (series.index <= end)]

    print(f'Mean value between {start} and {end} : {sample.mean()[0]}')

# Output
Mean value between 1998-01-01 00:00:00 and 1998-07-05 00:00:00 : -0.024342221543215112
Mean value between 1998-07-05 00:00:00 and 1998-09-21 00:00:00 : 0.13945008064765074

Вместо цикла вы также можете использовать понимание списка, например,

[series.loc[(series.index > dates[i]) & (series.index <= dates[i+1])].mean()[0] for i in range(len(dates) - 1) ] # [-0.024342221543215112, 0.13945008064765074]
0 голосов
/ 17 апреля 2019

Вы можете выполнить итерации по таким датам:

for ti in range(1,len(dates)):
    start_date,end_date=dates[ti-1],dates[ti]
    mask=(series.index > start_date) & (series.index <= end_date)
    print(series[mask].mean())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...