Заполните пропущенные строки на основе пропусков номера индекса, почему это работает?- серия панд - PullRequest
0 голосов
/ 30 ноября 2018

Скажем, у меня есть серия панд:

s = pd.Series([1,2],index=[0,3])

0    1
3    2
dtype: int64

И в индексе есть промежуток между 0 и 3, поэтому я хочу, чтобыдобавьте больше строк, чтобы заполнить пробелы, чтобы получить индекс [0, 1, 2, 3].

Таким образом, желаемый результат будет выглядеть так:

0    1.0
1    NaN
2    NaN
3    2.0
dtype: float64

И я сделал:

print(s.reindex(range(s.index.min(),s.index.max()+1)))

И это сработало!

Но почему?

Я ожидал результата:

0    1.0
1    2.0
2    NaN
3    NaN
dtype: float64

Но это не так, и дает ожидаемый результат!

(вы знаете, я был готов создать вопрос о том, как это сделать, но пока я готов показать попытку, я решил ее: D, поэтому задал вопрос, почему это сработало :-), lol)

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Внутреннее выравнивание данных. По сути, ваши исходные данные выровнены с индексами 0 и 3. При использовании переиндексации вы создаете новые строки 1 и 2 и повторно используете 0 и 3.

Посмотрите, что произойдет, если вы сделаете:

s.reindex([0,0,3,3])

Вывод:

0    1
0    1
3    2
3    2
dtype: int64

Панды автоматически используют выравнивание по индексу.

Или

s.reindex([1,2,5,6])

Вывод:

1   NaN
2   NaN
5   NaN
6   NaN
dtype: float64
0 голосов
/ 30 ноября 2018

Причина заключается просто в том, как реализовано reindex().

Если вы посмотрите на пример, приведенный в документации, выполнение reindex() только добавляет отсутствующий индекс вуказанный диапазон со значением NaN.Он не предполагает изменения индекса доступной записи.

...