Если вы просто хотите заменить индекс и не возражаете против дубликатов, вы можете просто установить новый индекс с помощью index // n_per_group + 1
(разделение по этажам):
n_per_group = 3
df.index = df.index // n_per_group + 1
Advantage : Вы можете индексировать по этикетке партии. Недостаток : Дубликаты в индексе, вероятно, вызовут некоторые проблемы.
Вместо замены индекса вы, конечно, также можете установить это в новую строку:
n_per_group = 3
df['batchlabel'] = df.index // n_per_group + 1
Преимущество : в индексе нет дубликатов. Недостаток : Индексирование по этикетке партии должно выполняться косвенно с помощью fi df[df['batchlabel'] == 2]
.
Рекомендуемое решение:
Но лучший способ - создать MultiIndex
с пакетами на уровне 0 и старыми индексами на уровне 1. Таким образом вы избежите наличия дубликатов , но все же можно индексировать по номеру партии. :
n_per_group = 3
# create multiindex
new_midx = pd.MultiIndex.from_arrays((df.index // n_per_group + 1, df.index))
# assign multiindex
df_midx = df.set_index(new_midx)
# index by batch number:
df_midx.loc[2]
# Out:
Diff N_Bars
3 2.06 59.0
4 -2.07 11.0
5 0.68 8.0