У меня есть датафрейм df с дублированными индексами:
a
o_idx
411 x
412 y
412 x
412 z
450 a
450 b
Я хотел бы назначить мультииндекс для дублированных строк, например:
a
o_idx index
411 0 x
412 0 y
412 1 x
412 2 z
450 0 a
450 1 b
где новый индекс равен 0, если он не является дубликатом. Если это дубликат, новый индекс должен быть в диапазоне длины, сколько раз он дублируется.
Сначала я попытался создать два кадра данных, пытаясь избавиться от дубликатов:
a = df[~df.index.duplicated(keep=False)]
a = a.reset_index()
a.index = np.zeros(len(a.index), dtype = int)
a = a.reset_index()
a = a.set_index(['index', 'o_idx'])
a.index.names = ['index', 'o_idx']
затем получим дубликаты:
b = df[df.index.duplicated(keep=False)]
b = b.reset_index()
b.index = range(len(b.index))
b = b.reset_index()
b = b.set_index(['index', 'o_idx'])
b.index.names = ['index', 'o_idx']
Затем объединить:
c = pd.concat([a,b])
Однако это не дает мне правильного результата, потому что b равно:
a
o_idx index
412 0 y
412 1 x
412 2 z
450 3 a
450 4 b
Так что у меня почти такая же проблема, как и в начале. Есть ли лучший способ приблизиться к этому?