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

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

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. Он не предполагает изменения индекса доступной записи.

Другие вопросы по тегам