Разница в методах интерполяции панд - PullRequest
0 голосов
/ 01 апреля 2019

мне нужно проверить разницу между «индексным» методом интерполяции и «линейным» методом интерполяции

я создал один случайный ряд панд с пропущенными значениями, а затем проверил результаты интерполяции линейным методом ииндексный метод

, но оба они возвращают один и тот же результат.Так должен ли он возвращать тот же результат?если да, то в каком случае я могу увидеть другие результаты?

s = pd.Series([21,13,np.nan,152,np.nan,46,98])
s.interpolate(method = 'index')
s.interpolate(method = 'linear')

Я получаю следующие результаты:

s.interpolate(method = 'index')
0     21.0
1     13.0
2     82.5
3    152.0
4     99.0
5     46.0
6     98.0
dtype: float64


s.interpolate(method = 'linear')
0     21.0
1     13.0
2     82.5
3    152.0
4     99.0
5     46.0
6     98.0
dtype: float64

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

Оба метода linear и index будут выполнять линейную интерполяцию для Серии;разница заключается в том, какие значения рассматриваются как независимая переменная:

  • method = 'index' использует числовые значения индекса (если в вашей серии не указан индекс, по умолчанию используется значение 0, 1,2, ..., n - 1)
  • method = 'linear' рассматривает элементы Серии как одинаково расположенные (без учета любых значений, указанных в индексе);это, конечно, эквивалентно использованию последовательности 0, 1, 2, ..., n - 1 в качестве диапазона независимых переменных

Итак, для любой серии, где индекс является значением по умолчанию (или любойдругая арифметическая прогрессия, например, 0, 2, 4, 6, ...) оба эти параметра дадут одинаковые результаты.

2 голосов
/ 01 апреля 2019

Если ваш index равен range или имеет одинаковый индекс разрыва и линейный результат, то получите тот же результат, попробуйте использовать приведенный ниже пример

s = pd.Series([21,13,np.nan,152,np.nan,46,98],index=[0,1,3,4,7,9,10])
s.interpolate(method = 'index')
Out[536]: 
0      21.000000
1      13.000000
3     105.666667
4     152.000000
7      88.400000
9      46.000000
10     98.000000
dtype: float64
s.interpolate(method = 'linear')
Out[537]: 
0      21.0
1      13.0
3      82.5
4     152.0
7      99.0
9      46.0
10     98.0
dtype: float64
...