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