Что такое индекс в массиве
Что проверяют
Аккуратность на границах. Аналитик ошибается в индексах не в алгоритме, а в выгрузке: сдвиг на одну строку в отчёте никто не заметит, пока цифра не разойдётся со сверкой.
Как отвечать
Индекс это позиция элемента, отсчёт которой в большинстве языков начинается с нуля, потому что индекс задаёт смещение от начала, а не порядковый номер. Аналитик при этом работает в смешанном мире: массивы в PostgreSQL нумеруются с единицы, оконная нумерация строк тоже начинается с единицы, строки в таблицах офисных редакторов тоже.
Отдельно стоит сказать про pandas, где слово «индекс» означает сразу две разные вещи: df.index это метки строк, а позиция это то, с чем работает iloc.
df.iloc[0] # первая строка по позиции
df.loc[0] # строка с меткой 0, может стоять где угодно
df.iloc[0:3] # три строки, правая граница не входит
df.loc[0:3] # четыре строки, правая граница входитПосле фильтрации метки остаются прежними и перестают совпадать с позициями, поэтому перед позиционной работой делают reset_index(drop=True).
Где спотыкаются
Смешивают доступ по метке и по позиции после фильтрации. Строка вроде обращения к нулевой метке отдаёт не первую строку выборки, а ту, что случайно сохранила метку ноль, либо падает с ошибкой ключа.
Переносят логику между SQL и Python и теряют единицу. В одном мире первый элемент массива это первый номер, в другом нулевой, а смещение в постраничной выборке вообще считается от нуля. Так и появляются отчёты, где первая строка потеряна или последняя задвоена.
Забывают про разное поведение правой границы: позиционный срез её не включает, срез по меткам включает. В периодах это стоит одного лишнего или одного потерянного дня, а на месячной агрегации такая ошибка выглядит правдоподобно.