Заполните пропущенные строки на основе пропусков номера индекса, почему это работает? - серия панд
Так скажи, у меня есть серия панд, как:
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, поэтому задал вопрос, почему это сработало:-), смеется)
2 ответа
Внутреннее выравнивание данных. По сути, ваши исходные данные выровнены с индексами 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
Причина просто потому, что как reindex()
реализовано.
Если вы посмотрите на пример, приведенный в документации, выполните reindex()
только добавляет отсутствующий индекс в указанном диапазоне со значением NaN. Он не предполагает изменения индекса доступной записи.