Pandas set_index не работает, как ожидалось, для нескольких столбцов

df = pd.DataFrame(
    [[21, 'Amol', 72, 67],
    [21, 'Amol', 78, 69],
    [21, 'Kiku', 74, 56],
    [22, 'Ajit', 54, 76]],
    columns=['rollno', 'name', 'physics', 'botony'])

print('DataFrame with default index\n', df)

Когда мы делаем это:

df = df.set_index(['rollno','name'])

print('\nDataFrame with MultiIndex\n',df)

На выходе мы получаем:

DataFrame with MultiIndex
              physics  botony
rollno name                 
21     Amol       72      67
       Amol       78      69
       Kiku       74      56
22     Ajit       54      76

Что я хочу:

              physics  botony
rollno name                 
21     Amol       72      67
                  78      69
       Kiku       74      56
22     Ajit       54      76

Итак, set_index группирует первый столбец 'rollno', но не второй столбец 'name', как я могу добиться этого?

Контекст: Я делаю это, чтобы преобразовать pandas df в html с диапазонами строк для первых 2 столбцов

Вы можете начать с сортировки ваших двух столбцов (установленных как мультииндекс), затем используйте pandas.DataFrame.loc с pandas.DataFrame.duplicated для замены дублирующихся записей пустыми строками :

df = df.sort_values(['rollno', 'name']).reset_index(drop=True)
df.loc[df.duplicated(["rollno", "name"]), 'name'] = ''
df.loc[df.duplicated('name'), 'name'] = ''
out= df.set_index(['rollno', 'name'])

# Выход :

print(out)

             physics  botony
rollno name                 
21     Amol       72      67
                  78      69
       Kiku       74      56
22     Ajit       54      76
Вернуться на верх