Преобразование месячных значений в дневные с использованием интерполяции pandas - PullRequest
0 голосов
/ 08 апреля 2020

У меня 12 среднемесячных значений для 1000 столбцов, и я хочу преобразовать данные в ежедневные значения, используя pandas. Я пытался сделать это, используя interplolate , но я получил дневные значения с 31/01/1991 по 31/12/1991, которые не охватывают весь год. Январь месяц значения не получают. Я использовал date_range для индекса фрейма данных.

date=pd.date_range(start="01/01/1991",end="31/12/1991",freq="M")

upsampled=df.resample("D")
interpolated = upsampled.interpolate(method='linear')

Как получить интерполированные значения за 365 дней?

1 Ответ

1 голос
/ 08 апреля 2020

Обратите внимание, что интерполяция составляет между известными точками.

Таким образом, для интерполяции в течение всего года недостаточно иметь только значения 12 (для каждого месяц). У вас должно быть 13 значений (например, для начала каждого месяца и начала следующего года).

Таким образом, я создал источник df как:

date = pd.date_range(start='01/01/1991', periods=13, freq='MS')
df = pd.DataFrame({'date': date, 'amount': np.random.randint(100, 200, date.size)})

получая, например:

         date  amount
0  1991-01-01     113
1  1991-02-01     164
2  1991-03-01     181
3  1991-04-01     164
4  1991-05-01     155
5  1991-06-01     157
6  1991-07-01     118
7  1991-08-01     133
8  1991-09-01     184
9  1991-10-01     183
10 1991-11-01     159
11 1991-12-01     193
12 1992-01-01     163

Затем, чтобы повысить частоту до дневной частоты и выполнить интерполяцию, я запустил:

df.set_index('date').resample('D').interpolate()

Если вы не хотите, чтобы результат содержал последнюю строку (для 1992-01-01 ), возьмите только фрагмент вышеупомянутого результата, отбросив последнюю строку:

df.set_index('date').resample('D').interpolate()[:-1]
...