如何将多种条件格式应用于数据框?

时间:2019-07-01 17:18:18

标签: python pandas xlsxwriter

我正在为自己的工作编写一个程序,该程序将读取一个excel文件,按分发者排序,然后格式化每个文件并将其写入自己的excel文件。

通常手动完成,这需要几天的时间才能复制,粘贴,格式化,然后为每个分发服务器保存每个文件。我设法将它们全部写入自己的excel文件中,只有我在格式化方面遇到麻烦。

我希望所有Credit Memos都以红色字体设置格式,但是当我应用这种格式时,它将覆盖我在money和percent列中使用的数字格式。

此外,我在将总计添加到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文件,这些文件的格式取决于条件格式。

0 个答案:

没有答案