Многоиндексная сводная таблица pandas меняет вес шрифта с «жирный» на «обычный» - PullRequest
0 голосов
/ 29 октября 2019

сводная таблица У меня есть

df=pd.DataFrame({'Fruit':['Apple', 'Orange', 'Apple', 'Apple', 'Orange', 'Orange'],
            'Variety':['Fuji', 'Navel', 'Honeycrisp', 'Gala', 'Tangerine', 'Clementine'],
            'Count':[2, 5, 5, 1, 8, 4]})
df_pvt=pd.pivot_table(df, index=['Fruit','Variety'], values=['Count'], aggfunc=np.sum)
df=pd.concat([d.append(d.sum().rename((k, 'SubTotal'))) for k, d in df_pvt.groupby(level=0)]).append(df_pvt.sum().rename(('','GrandTotal')))

сводная таблица, которую я хочу

Как получить SubTotal, GrandTotalи эти значения «полужирный» и остальной шрифт в разделе «Разнообразие и количество» как «нормальный» font_weight, точно так же, как у меня есть изображение? Или любым другим способом, где я могу получить промежуточные итоги и общие итоги, а затем остальные данные.

1 Ответ

0 голосов
/ 29 октября 2019

Сложная проблема ... вам нужно будет найти способ выбрать определенные теги.

Давайте попробуем этот фрагмент кода CSS-селектора для ноутбуков Jupyter.

def styleme(x):
    fw = 'bold' if 'Total' in x.name[1] else 'normal'
    l = [f'font-weight: {fw}']*len(x)
    return l

total_idx = np.where(~df.index.get_level_values(1).str.contains('Total'))

table_style = [{'selector':f'tbody tr th[id*=level1_row{i}]', 'props':[('font-weight','normal')]} for i in total_idx[0]]
df.style.apply(styleme, axis=1).set_table_styles(table_style)

Вывод:

enter image description here

Однако, как и раньше, в предыдущем посте это форматирование не переносилось, чтобы превзойти вывод to_excel:

enter image description here

...