Python - Pandas: как я могу интерполировать значения, которые растут в геометрической прогрессии? - PullRequest
0 голосов
/ 25 марта 2020

У меня есть серия Pandas, которая содержит динамику цен на продукт (в моей стране высокий уровень инфляции) или, скажем, количество людей, инфицированных коронавирусом, в определенной стране. Значения в обоих этих наборах данных растут в геометрической прогрессии; это означает, что если бы у вас было что-то вроде [3, NaN, 27], вы бы хотели интерполировать, чтобы в этом случае отсутствующее значение было заполнено 9. Я проверил метод интерполяции в документации Pandas, но если я что-то пропустил, я ничего не нашел об этом типе интерполяции.

Я могу сделать это вручную, вы просто берете среднее значение c или, в случае большего количества значений, получаете среднюю скорость роста, выполняя (окончательное значение / начальное значение) ^ (1 / расстояние между их), а затем умножить соответственно. Но в моей Серии есть много значений, которые нужно заполнить, так как мне сделать это автоматически? Я предполагаю, что что-то упустил, так как это кажется чем-то очень базовым c.

Спасибо.

1 Ответ

1 голос
/ 25 марта 2020

Вы можете взять логарифм вашей серии, интерполировать линейно, а затем преобразовать его обратно в свою экспоненциальную шкалу.

import pandas as pd
import numpy as np

arr = np.exp(np.arange(1,10))
arr = pd.Series(arr)
arr[3] = None
0       2.718282
1       7.389056
2      20.085537
3            NaN
4     148.413159
5     403.428793
6    1096.633158
7    2980.957987
8    8103.083928
dtype: float64
arr = np.log(arr) # Transform according to assumed process.
arr = arr.interpolate('linear') # Interpolate.
np.exp(arr) # Invert previous transformation.
0       2.718282
1       7.389056
2      20.085537
3      54.598150
4     148.413159
5     403.428793
6    1096.633158
7    2980.957987
8    8103.083928
dtype: float64
...