Как я могу применить несколько условных форматов к фрейму данных? - PullRequest
1 голос
/ 01 июля 2019

Я пишу программу для своей работы, которая будет читать файл Excel, сортировать по дистрибьютору, а затем форматировать каждый и записывать их в свой собственный файл Excel.

Обычно выполняется вручную, это занимаетнесколько дней, чтобы скопировать и вставить, отформатировать, а затем сохранить каждый файл для каждого распространителя.Мне удалось заставить его записать их все в их собственный файл Excel, только у меня возникли проблемы с форматированием.

Я хотел, чтобы все кредитовые авизо были отформатированы красным шрифтом, однако при применении этогоформат, он переопределяет форматирование чисел, которое у меня есть, в столбцах «деньги» и «проценты».

Кроме того, у меня возникают проблемы с добавлением итога в нижнюю часть двух конкретных столбцов.Мне нужны только итоги в 2 столбцах, а остальные столбцы для этой строки должны быть пустыми.

Любая помощь с этим будет принята с благодарностью!

Я попытался отформатировать красный текстперед форматированием числа, но затем, когда применяется форматирование числа, оно возвращается к черному шрифту.

import pandas as pd

sheet_name = 'Report - May 2019'

data = pd.read_excel(r'path.xlsx')
df = pd.DataFrame(data)

# Store each unique distributor in a list
distributors = df['Distributor'].unique().tolist()

for d in distributors:
    path = r"path.xlsx"
    is_dist = df['Distributor'] == d
    dist = df[is_dist]
    writer = pd.ExcelWriter(path, engine='xlsxwriter')
    dist.to_excel(writer, index=False, sheet_name=sheet_name, startrow=1, header=False)
    workbook = writer.book
    worksheet = writer.sheets[sheet_name]

    # Add header format
    header_format = workbook.add_format({
        'bold': True,
        'text_wrap': True,
        'fg_color': '#3FB6FF',
        'border': 1
    })

    # Set header and column width and format header
    for col_num, value in enumerate(dist.columns.values):
        worksheet.write(0, col_num, value, header_format)

        column_len = dist[value].astype(str).str.len().max()
        column_len = max(column_len, len(value))

        worksheet.set_column(col_num, col_num, column_len)

Это проблема

   # Set Credit Memo to Red Font
    cm_red_font = workbook.add_format({'font_color': 'red'})
    num_rows = len(dist.index)
    for row in range(num_rows):
        if dist.iloc[row, 14] < 0:
            worksheet.set_row(row + 1, 15, cm_red_font)

    # Add a total to 'Total Product Invoiced Amount' Column
    #sales_sum = dist['Total Product Invoiced Amount'].sum()
    #dist.append(pd.DataFrame)
    #print(str(d), dist['Total Product Invoiced Amount'].iloc[len(dist.index)])
    # Format money columns
    money_format = workbook.add_format({'num_format': '#0.00'})
    worksheet.set_column('L:M', 12, money_format)
    worksheet.set_column('O:O', 12, money_format)

    # Format percent column
    percent_format = workbook.add_format({'num_format': '0%'})
    worksheet.set_column('N:N', 12, percent_format)

    # Format date columns
    date_format = workbook.add_format({'num_format': 'mm/dd/yyyy'})
    worksheet.set_column('B:B', 12, date_format)
    worksheet.set_column('F:F', 12, date_format)

    writer.save()

Ожидаемый результат - несколько файлов Excel, правильно отформатированных на основе условного форматирования.

...